2017-04-23 1 views
0

내 게임에 라이프 바가 있으며, 미니언이 바나나를 잡을 때마다 라이프 바가 감소합니다. 그것은 잘 작동하지만 문제는 그것이 땅에 닿기 전에 라이프 바가 감소한다는 것입니다. 지상에 또 다른 hitTest를 추가하고 & & 진술을해야합니까? 메인 프로그램 :AS3 hitTestObject == false

import flash.display.MovieClip; 
import flash.events.KeyboardEvent; 
import flash.events.Event; 

var leftKey:Boolean; 
var rightKey:Boolean; 
var upKey:Boolean; 
var downKey:Boolean; 
var jump:Boolean = false; 
var xvelocity:int = 9; 
var yvelocity:int = 3; 
var gravity:Number = 7; 


stage.addEventListener(Event.ENTER_FRAME, changeVelocity); 
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeyUp); 
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyDown); 

    function changeVelocity(evt:Event){ 
     moveMinion(); 
     yvelocity += gravity; 
    } 

    function moveMinion(){ 

     if (leftKey == true){ 
      sideMinion.x -= xvelocity; 
      sideMinion.left(); 

     } 
     if (rightKey == true){ 
      sideMinion.x += xvelocity; 
      sideMinion.right(); 
     } 

    } 

    function checkKeyDown(e:KeyboardEvent){ 
     if (e.keyCode == Keyboard.LEFT){ 
      leftKey = true; 
     } 
     else if (e.keyCode == Keyboard.RIGHT){ 
      rightKey = true; 
     } 

    } 

    function checkKeyUp(e:KeyboardEvent){ 
     if (e.keyCode == Keyboard.LEFT){ 
      leftKey = false; 
     } 
     else if (e.keyCode == Keyboard.RIGHT){ 
      rightKey = false; 
     } 

    } 

    btnStart.addEventListener(MouseEvent.CLICK, makeItFall); 

    function makeItFall(e:MouseEvent){ 



    var numBananas = 6; 
    var theBananas: Array = new Array(); 
    theBananas = []; 
    for (var i = 0; i < numBananas; i++) { 
    var aBanana: banana = new banana(); 
    theBananas.push(aBanana); 
    btnStart.visible=false; 
    aBanana.y=100; 
    theBananas[i].setSpot(Math.random()*450,Math.random()*200); 
    theBananas[i].setSpeed((Math.random()), 1); 
    stage.addChild(aBanana); 

} 

var health: Number= 100; 
var healthPercent: Number= 1; 

addEventListener(Event.ENTER_FRAME, pickUpBananas); 

function pickUpBananas(event:Event){ 

    for (var i:int = theBananas.length-1; i>-1; i--){ 

      if (sideMinion.hitTestObject(theBananas[i])){ 
       stage.removeChild(theBananas[i]); 
       theBananas.splice(i,1); 

     } 
     else if (sideMinion.hitTestObject(theBananas[i])==false){ 
      health=health-10; 
      healthPercent=health/100; 
      trace(healthPercent); 
      life.scaleX= healthPercent; 

     } 
    } 
} 

    } 


stop(); 

그리고 바나나 클래스 :

package { 
    import flash.display.MovieClip; 
    import flash.utils.Timer; 
    import flash.events.TimerEvent; 
    import flash.events.MouseEvent; 
    import flash.events.Event; 
    import flash.events.Event; 

    public class banana extends MovieClip { 

     var velX: Number = 0; 
     var velY: Number = 0; 
     var falling: Boolean = false; 
     var gravity: Number = 2; 

     public function banana() { 
      var timing: Timer = new Timer(25, 0); 
      timing.addEventListener(TimerEvent.TIMER, moveMe); 
      timing.start(); 

     } 

     private function moveMe(event: TimerEvent) 
    { 
     x += velX; 
     y += velY; 

     if (falling) velY += gravity; 

     /* trace("[BANANA] position:", x, y, "speed:", velX, velY);*/ 
    } 


     public function setSpeed(dx,dy) { 
      velX = dx; 
      velY = dy; 
     } 

      public function setSpot(atX,atY){ 
      this.x=atX; 
      this.y=atY; 
     } 


     public function makeItFall(){ 
      falling=true; 
     } 


    } 

} 

답변

1

귀하의 문제는 else 블록에 기본적이다. 바나나가 안타를 치면 x를하십시오, else y. 그것이 문제이다. 첫 번째 부분은 if banana hits the minion, do x으로 유지 한 다음 if banana hits bottom do y을 추가하십시오.

else을 제거하십시오.

희망이 되셨습니다.

편집 :

if (the banana is hitting the minion){ 
    // add health or whatever 
    // remove banana from array 
    return; 
} 
if (the banana hits the floor){ 
    // lose health or whatever 
    // remove banana from array 
    return; 
} 

return 문은 당신이 바나나를 제거하는 경우, 당신은 if 문 다음에 가서 이미 제거 된 바나나를 확인하는 대신 해당 기능을 종료하는 것이 너무입니다.

+0

문제는 동일한 줄에서 2 가지 구문 오류가 발생한다는 것입니다. 라인 85 컬럼 51은 동등한 이전의 식별자를 기대하고 컬럼 102는 오른쪽 괄호 앞에 세미콜론을 예상합니다. – Catalina

+0

행은 85입니다 (else 문이있는 행). – Catalina

+0

완벽한 :) 문제의 일부는 내가 여전히 성명서에 &&를 유지하고 있었다는 것이 었습니다. 고맙습니다. – Catalina