MyObj
延伸MovieClip
(或Sprite
)。基本上所有這一切發生的是,當你得到KEY_UP
(不是KEY_DOWN
,因爲如果按住鍵將會重複),你應該只是切換變量。然後,每幀,檢查這個變量,如果是它的好,移動
喜歡的東西:
private var m_shouldMove:Boolean = false;
// constructor
public function MyObj()
{
// add our listener for when we're added to the stage as we'll be adding events on it
this.addEventListener(Event.ADDED_TO_STAGE, this._onAddedToStage);
}
private function _onAddedToStage(e:Event):void
{
// NOTE: the keyboard listener goes onto the stage
// you'll also need to remove the events when your object is removed (e.g. REMOVED_FROM_STAGE)
this.removeEventListener(Event.ADDED_TO_STAGE, this._onAddedToStage);
this.addEventListener(Event.ENTER_FRAME, this._onEnterFrame);
this.stage.addEventListener(KeyboardEvent.KEY_UP, this._onKeyUp);
}
private function _onEnterFrame(e:Event):void
{
// every frame, if we should move, do so
if(this.m_shouldMove)
this.x += this.speed;
}
private function _onKeyUp(e:KeyboardEvent):void
{
if(e.keyCode == Keyboard.SPACE)
this.m_shouldMove = !this.m_shouldMove; // toggle our var
}
更新
我返工您的代碼示例,所以它應該現在的工作:
var rope = MovieClip(this.root).boat_mc.rope_mc.fishyrope_mc.hitbox_mc;
var ropeMove:Boolean = false;
stage.addEventListener(Event.ENTER_FRAME, ropeCode);
stage.addEventListener(KeyboardEvent.KEY_UP, onSpacebarUp);
function onSpacebarUp(e:KeyboardEvent):void
{
if (e.keyCode == Keyboard.SPACE)
ropeMove = !ropeMove; // toggles ropeMove (i.e. if it's true, sets it to false, and vice versa)
}
function ropeCode(e:Event):void
{
// move the rope
if(ropeMove)
{
rope.y += xSpeed;
// stop moving if we've gone too far
if(rope.y > 600.0)
{
rope.y = 600.0;
ropeMove = false;
}
}
}
我改變什麼:
- 持有你的繩索作爲一個變量,使其更容易訪問
- 刪除
ropey
,因爲它是沒有必要的(你> 600.0
支票,你總有需要重新計算
- 現在被添加鍵盤事件與輸入幀事件(你添加一個新的鍵盤事件的每一幀
- 鍵盤事件偵聽器只是切換的
ropeMove
VAR(有沒有點檢查> 600.0
在這裏,因爲它意味着你只當任何其他鍵被按下檢查)
- 將進入幀事件簡單地移動繩索y
- 在輸入框情況下,如果我們y是太大了,我們停止移動
什麼代碼是這樣做的:
- 我們建立瓦爾 -
rope
和ropeMove
- ropeMove
使用要知道,如果我們可以將繩子或不
- 我們添加我們的事件偵聽器 - 一個用於keybard事件,搭上了空格鍵,和一個輸入幀事件,所以如果有必要
- 在我們可以使我們的繩子鍵盤事件,如果我們的關鍵是空格鍵,我們撥動我們的
ropeMove
變量
- 在輸入框時,如果
ropeMove
是真的,我們把我們的繩子
- 如果我們
rope.y
大於600,我們把它夾到600,並設置ropeMove
到false
所以我們停止移動
更新2
由於增加了一個變量ropeDir
,繩子這時將會連續上下移動(地設想明ropeMove
是true
)
var rope = MovieClip(this.root).boat_mc.rope_mc.fishyrope_mc.hitbox_mc;
var ropeMove:Boolean = false;
var ropeDir:int = 1;
stage.addEventListener(Event.ENTER_FRAME, ropeCode);
stage.addEventListener(KeyboardEvent.KEY_UP, onSpacebarUp);
function onSpacebarUp(e:KeyboardEvent):void
{
if (e.keyCode == Keyboard.SPACE)
ropeMove = !ropeMove; // toggles ropeMove (i.e. if it's true, sets it to false, and vice versa)
}
function ropeCode(e:Event):void
{
// move the rope
if(ropeMove)
{
rope.y += xSpeed * ropeDir;
// stop moving if we've gone too far
if(rope.y > 600.0 && ropeDir == 1)
ropeDir = -1;
else if(rope.y < 0.0 && ropeDir == -1)
ropeDir = 1;
}
}
嗨,請檢查我的代碼上面的頂部,我試圖按照你的想法沒有類,但它不工作,非常感謝您的幫助。如果你能幫我多一點,我會很感激。 – Anando
非常感謝你,對於像我們這樣的noobs來說,這是一個很好的解釋。只是一個問題,由於某種原因,它不會停在Y 600. – Anando
沒關係我犯了一個錯誤:)修復它。非常感謝你 – Anando