2017-02-01 9 views
0

현재 flappy bird와 같은 간단한 2 차원 게임을 만들고 있습니다. 이 게임에 익숙하지 않은 사람들을 위해 게임은 플레이어가 개체를 제어하고 네온 파이프 행을 타격하지 않고 횡단하려고 시도하는 측면 스크롤러입니다. 이 Example에서 UFO (initFrog)가 네온 파이프를 완전히 만지지 않는다는 것을 알 수 있습니다. 그러나 네온 파이프의 광선 효과는 .png 파일의 일부이므로 UFO는이를 교차점으로 인식합니다. 타이머가 두 개가 교차 할 때 멈추도록 설정되어 있습니다 (아래 마지막 코드 블록보기).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

감사합니다. 매우 도움이되는 –