2013-12-19 87 views
0

我試圖做一個基本的迷宮遊戲略有扭曲。按設定的時間間隔(由計時器事件設定),迷宮旋轉90%。我遇到的問題是關於hitTestPoint。命中測試在迷宮遊戲之前運行,並在完成360%旋轉後運行,但在90%,180%和270%旋轉點期間停止運行。我在AS3已經用盡了所有的知識(僅限於5個月的AS3程序員)來解決這個問題,並在我的智慧結束。遊戲旋轉碰撞問題

迷宮是在容器和容器是旋轉的,這是使得在效果迷宮具有不斷如下圍繞塔迷宮玩家的二次移動樞轉點。另外容器正在按鍵而不是玩家。

任何人都可以請解釋是什麼原因造成的問題,如何解決它,如果可能的話告訴我我應該使用的代碼示例HALP我。

這是我到目前爲止。

stop(); 

import flash.events.Event; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 
import flash.sensors.Accelerometer; 

var speed:Number = 5; 

var northSpeed = speed; 
var southSpeed = speed; 
var eastSpeed = speed; 
var westSpeed = speed; 

var upPressed:Boolean = false; 
var downPressed:Boolean = false; 
var leftPressed:Boolean = false; 
var rightPressed:Boolean = false; 
var Orientation:int = 0; 

var count:int = 0; 
var timer:Timer = new Timer(1000,60); 
var time = 60; 

player.addEventListener(Event.ENTER_FRAME, MovePlayer); 
containBox.maze.addEventListener(Event.ENTER_FRAME, hitWalls); 
stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed); 
stage.addEventListener(KeyboardEvent.KEY_UP, KeyDepressed); 
containBox.maze.addEventListener(Event.ENTER_FRAME, spin); 

timer.start(); 
timer.addEventListener(TimerEvent.TIMER, timerHandle); 

function timerHandle(e:TimerEvent):void 
{ 
    txt_time.text = time; 
    time--; 
} 

function hitWalls(event:Event):void 
{ 
    if (upPressed==true && containBox.maze.hitTestPoint(player.x,player.y,true)) 
    { 
     northSpeed = 0; 
     player.y = player.y+=2; 
    } 
    else 
    { 
     northSpeed = speed; 
    } 
} 


function spin(event:Event):void 
{ 
    if (time <= 0) 
    { 
     txt_time.text = "TIMES UP!"; 
    } 
    if (time <= 54) 
    { 
     containBox.rotation = 90; 
     Orientation = 1; 
    } 
    if (time <= 50) 
    { 
     containBox.rotation = 180; 
     Orientation = 2; 
    } 
     if (time <= 48) 
    { 
     containBox.rotation = 270; 
     Orientation = 3; 
    } 
     if (time <= 46) 
    { 
     containBox.rotation = 0; 
     Orientation = 0; 
    } 

} 

function MovePlayer(event:Event):void 
{ 
    if (Orientation == 0) 
    { 
     if (upPressed) 
     { 
      containBox.maze.y += northSpeed; 
     } 
     if (downPressed) 
     { 
      containBox.maze.y -= southSpeed; 
     } 
     if (leftPressed) 
     { 
      containBox.maze.x += westSpeed; 
     } 
     if (rightPressed) 
     { 
      containBox.maze.x -= eastSpeed; 
     } 
    } 
    else if (Orientation == 1) 
    { 
     if (upPressed) 
     { 
      containBox.maze.x += 5; 
     } 
     if (downPressed) 
     { 
      containBox.maze.x -= 5; 
     } 
     if (leftPressed) 
     { 
      containBox.maze.y -= 5; 
     } 
     if (rightPressed) 
     { 
      containBox.maze.y += 5; 
     } 
    } 
    else if (Orientation == 2) 
    { 
     if (upPressed) 
     { 
      containBox.maze.y -= 5; 
     } 
     if (downPressed) 
     { 
      containBox.maze.y += 5; 
     } 
     if (leftPressed) 
     { 
      containBox.maze.x -= 5; 
     } 
     if (rightPressed) 
     { 
      containBox.maze.x += 5; 
     } 
    } 
    else if (Orientation == 3) 
    { 
     if (upPressed) 
     { 
      containBox.maze.y += 5; 
     } 
     if (downPressed) 
     { 
      containBox.maze.y -= 5; 
     } 
     if (leftPressed) 
     { 
      containBox.maze.x += 5; 
     } 
     if (rightPressed) 
     { 
      containBox.maze.x -= 5; 
     } 
    } 
} 

function KeyPressed(event:KeyboardEvent):void 
{ 
    switch (event.keyCode) 
    { 
     case Keyboard.UP : 
      { 
       upPressed = true; 
       break; 
      }; 
     case Keyboard.DOWN : 
      { 
       downPressed = true; 
       break; 
      }; 
     case Keyboard.LEFT : 
      { 
       leftPressed = true; 
       break; 
      }; 
     case Keyboard.RIGHT : 
      { 
       rightPressed = true; 
       break; 
     } 
    } 
} 

function KeyDepressed(event:KeyboardEvent):void 
{ 
    switch (event.keyCode) 
    { 
     case Keyboard.UP : 
      { 
       upPressed = false; 
       break; 
      }; 
     case Keyboard.DOWN : 
      { 
       downPressed = false; 
       break; 
      }; 
     case Keyboard.LEFT : 
      { 
       leftPressed = false; 
       break; 
      }; 
     case Keyboard.RIGHT : 
      { 
       rightPressed = false; 
       break; 
     } 
    } 
} 

非常感謝, Reece。

回答

0

你需要做的二維座標系統改造,做一個適當的比較。見,玩家基本上都是站在一個固定的點,從而(player.x, player.y)是固定的,hitTestPoint()使用當地的this對象提供的座標,你的情況迷宮。爲了讓玩家的座標,在迷宮中的系統,需要先得到全球的地位,然後得出局部位置,有功能的是,localToGlobal()globalToLocal()分別。

function hitWalls(event:Event):void 
{ 
    var p:Point=new Point(player.x,player.y); 
    var dp:Point=containBox.maze.globalToLocal(player.parent.localToGlobal(p)); 
    // now test vs dp instead of player. 
    if (upPressed==true && containBox.maze.hitTestPoint(dp.x,dp.y,true)) 
    { 
     northSpeed = 0; 
     player.y = player.y+=2; 
    } 
    else 
    { 
     northSpeed = speed; 
    } 
}