2017-02-01 6 views
0

私は現在、フラッフィーな鳥のような単純な2次元ゲームを作っています。これに慣れていない人にとっては、ゲームはサイド・スクローラーで、プレーヤーはオブジェクトをコントロールし、ネオン・パイプの行間を飛行しようとします。この中でExampleあなたはUFO(initFrog)がネオンパイプに全く触れていないことが分かります。しかし、ネオンパイプのグロー効果は.pngファイルの一部なので、UFOはそれを交点として認識します。 2つが交差するときに停止するように設定されたタイマーがあります(下のコードの最後のブロックを表示)。JavaFXゲームのグラフィックス:これを解決するのに役立ちます

UFOがネオン自体に当たったときにタイマーを止めるにはどうすればいいですか?

private Node initFrog() { 
    ImageView falc = new ImageView(); 
    falc.setImage(milFalc); 
    falc.setTranslateY(300-39); 
    falc.setTranslateX(240); 
    falc.setScaleX(.3); 
    falc.setScaleY(.3); 
    return falc; 
    } 

private Node ships() { 
    int haut = (int)(Math.random()*600); 
    ImageView sheep = new ImageView(); 
    sheep.setImage(Orbs); 
    sheep.setTranslateY(haut-500); 
    sheep.setTranslateX(800); 
    sheep.setScaleX(.017); 
    sheep.setScaleY(.017); 
    root.getChildren().add(sheep); 
    return sheep; 
    } 

private Node initNeon() { 
    int haut = (int)(Math.random()*260); 
    ImageView neona = new ImageView(); 
    neona.setImage(neon1); 
    neona.setTranslateY(haut-200); 
    neona.setTranslateX(800); 
    neona.setRotate(90); 
    neona.setScaleX(1.); 
    neona.setScaleY(.8); 
    root.getChildren().add(neona); 
    return neona; 
    } 


private Node SpawnzCar() { 
    int hauts = (int)(Math.random() *280); 
    ImageView neona = new ImageView(); 
    neona.setImage(neon2); 
    neona.setTranslateY(hauts+520); 
    neona.setTranslateX(800); 
    neona.setRotate(90); 
    neona.setScaleX(1.); 
    neona.setScaleY(.8); 
    root.getChildren().add(neona); 
    return neona; 
} private void onUpdate() { 

for (Node car : cars) 
    car.setTranslateX(car.getTranslateX() - 11); 
if (Math.random() <= 0.07) { 
    cars.add(SpawnzCar()); 
    // cars.add(ships()); 
    cars.add(initNeon());} 
    checkState(); 
    } 

private void checkState() { 
    for (Node car : cars) { 
    if (car.getBoundsInParent().intersects(frog.getBoundsInParent())) { 
     frog.setTranslateX(frog.getTranslateX()); 
     timer.stop(); 
     frog.setTranslateY(frog.getTranslateY()); 
     return; 
     } } 

答えて

0

代わりのテストPNGファイルが交差する場合は、手動で座標を使用して変更のヒットボックスをチェックすることができます。私はあなたがufoとパイプの座標の値をどこに格納しているのかわからないので、この例では擬似コードを使用します。

public boolean isCollision(){ 
    if(ufo.getX() + ufo.width() > pipe.getX() + pipe.getOffSetWidth() && ufo.getX() < pipe.getX() + pipe.width() - pipe.getOffSetWidth()){ 
     if(\\check for y value of height, this can be different depending on your way of storing pipes){ 
      return true; 
     } 
    } 
} 

あなたのoffSetWidth()の値は、あなたのパイプのイメージとあなたは衝突がで発生したいパイプの部分の端部との間のピクセルの長さになりたいです。

+0

ありがとうございます!非常に役立ちます –

関連する問題