0

먼저액션 스크립트 3 : 문자는 모든

내가 인도네시아 해요이 질문을 읽는 사람의 관심에 감사드립니다, 나의 영어가 나빴다면 사과 배열의 모든 객체와 테스트 오브젝트를 기록했다.

저는 현재 Flash ActionScript 3 또는 Unity를 사용하여 터치 스크린 Android 게임을 만드는 학교 프로젝트에 있습니다. 현재 프로젝트는 ActionScript 3로 Flash를 사용하여 만들어졌습니다. 현재 진행중인 작업은 여성 스쿠버 다이버와 관련된 Feeding Frenzy와 유사한 게임입니다 수중에 떨어지는 물고기 폭탄을 몰살시킬 것이다.

다이버가 화면의 모든 폭탄에 대해 경고하도록하려고합니다. RegularBomb 클래스를 무작위 x 위치로 떨어 뜨리는 BombsLayer 클래스가 있습니다. 모든 RegularBomb 인스턴스가 Array에 배치 된 다음 hitTestObject를 사용하여 반복 할 때마다 사용하므로 다이버가 무비 클립 내부의 투명한 원을 누르는 경우 느낌표가 나타나 다이버 클래스의 readyToDefuse 부울을 true로 설정하고 다이버가 부울은 거짓으로 설정되고 감탄 부호는 사라집니다.

내 문제는 다이버가 배열의 마지막 폭탄 무비 클립과 만 상호 작용할 수 있다는 것입니다. 첫 번째 폭탄 아이가 배열에 추가되고 잠수부가 도달하면 느낌표가 나타납니다. 그러나 새로운 폭탄이 인스턴스화 될 때마다 느낌표가 사라지고 잠수부가 새 폭탄으로 이동하여 신호를 만들기 위해 인스턴스화해야합니다 나타나다.

이 질문에 대한 제안 : AS3 - array hit test in 'for each' loop only works properly with last object in array을 읽어 각 for 루프에서 else 문을 제거했지만 제거하면 readyToDefuse가 True로 유지되고 느낌표가 계속 나타납니다.

나는 구글 검색을 수행하고 아무것도 내 문제에 대답 것 같다, 여기

내 전체 코드입니다 ... 내가 프리젠 테이션 할 때까지 일주일 동안이 게임을 완료해야하고이 지난 일 동안 나를 혼란 운전했다 Bombslayer 클래스 :

내가 너무 완벽한 프로젝트를 업로드 할 수 있습니다 필요한 경우
package { 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.Event; 

    public class BombsLayer extends MovieClip{ 
     public var area:Sprite; 
     public var bombs:Array; 
     public var bomb:RegularBomb; 
     public var bombground:BombGround; 
     public var diver:Diver; 
     public var warner:BombWarn; 

     public function BombsLayer(character:Diver, warn:BombWarn){ 
      // constructor code 
      area = new Sprite(); 
      area.graphics.beginFill(000000, 0); 
      area.graphics.drawRect(0,0,2200,720); 
      area.graphics.endFill(); 
      addChild(area); 

      diver = character; 
      warner = warn; 

      bombs = new Array(); 
      var newBomb = new RegularBomb(Math.random()*area.width, diver, warner); 
      bombs.push(newBomb) 
      addChild(newBomb); 

      bombground = new BombGround(0, 670, this); 
      addChild(bombground); 

      this.addEventListener(Event.ENTER_FRAME, moveBomb); 
     } 
     function moveBomb(event:Event){ 
      if(Math.random() <= 0.0005){ 
       var newBomb = new RegularBomb(Math.random()*area.width, diver, warner); 
       bombs.push(newBomb) 
       addChild(newBomb); 
      } 
      for each(var bomb:RegularBomb in bombs){ 
       bomb.moveDown(); 
       if(diver.hitTestObject(bomb)){ 
        warner.visible = true; 
        diver.readyToDefuse = true; 
       } 
       else{ 
        warner.visible = false; 
        diver.readyToDefuse = false; 
       } 
      } 
     } 
    } 
} 

..

모두 감상 할 수 있습니다. 감사합니다.

답변

0

논리가 잘못되었습니다. 폭탄을 둘러보고 다이버와 접촉하여 폭탄을 발견하고 폭탄으로 작업해야합니다. 그렇지 않으면 다이버는 폭탄 A를 해체 할 준비가되었지만 B, C 및 D를 해체 할 준비가되지 않았으므로 준비가되지 않았습니다.

function moveBomb(event:Event) 
{ 
    var aBomb:RegularBomb; 

    if (Math.random() <= 0.0005) 
    { 
     aBomb = new RegularBomb(Math.random() * area.width, diver, warner); 
     bombs.push(aBomb) 
     addChild(aBomb); 
    } 

    for each(aBomb in bombs) aBomb.moveDown(); 

    // Find bomb in diver's vicinity. 
    aBomb = findBomb(); 

    // The same as "if (aBomb != null)" 
    if (aBomb) 
    { 
     warner.visible = true; 
     diver.readyToDefuse = true; 
    } 
    else 
    { 
     warner.visible = false; 
     diver.readyToDefuse = false; 
    } 
} 

function findBomb():RegularBomb 
{ 
    for each(var aBomb:RegularBomb in bombs) 
     if (diver.hitTestObject(aBomb)) 
      return aBomb; 

    return null; 
} 
+0

실제로 그것은 단지 시작에 불과합니다. 각 폭탄이 도달하고 사용자가 해체 버튼을 들고 있기 때문에 폭탄의 포션에서 지시기가 충전되고 만원이되면 폭탄 어린이가 사라지고 폭탄 어린이가 배열에서 제거됩니다. 또한, 폭탄뿐만 아니라 상어, 해파리, 바다뱀, 복어와 같은 위험한 바다 생물과 같은 상호 작용을하고 싶었지만 경고받는 대신 다이버가 그 중 하나를 치면 다이버의 건강 상태가 감소합니다 . 나는 똑같이해야합니까? 그런데 대단히 감사합니다 !! –

+0

@AzmiFarhan 아니요, 즉석 히트의 논리는 다릅니다. 일반적인 용어로 생각해보십시오. 잠수부는 폭탄 한개를 골라서 그것을 폭파시킬 준비를해야합니다. 그런 다음 ** ** 위험한 물고기는 얼마나 많은 물고기가 될 지에 관계없이 잠수부를 즉시 손상시킵니다. – Organis

+0

물고기에 대한 이전 논리를 사용해야합니까? –