我有一個遊戲。 (感覺要下載它here)Movieclip不能自行移動
在我的遊戲中,你可能會注意到這個人不會自行移動。您必須單擊一次屏幕才能讓該人用箭頭鍵左右移動。
我Main.as:
package
{
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.utils.getTimer;
import flash.events.TimerEvent;
import flash.display.Stage;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.display.DisplayObjectContainer;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.geom.ColorTransform;
import flash.text.TextFormat;
import flash.text.engine.TextBaseline;
public dynamic class Main extends MovieClip
{
// classes
private var _physics:Physics;
private var _timer:Timer;
var interval_timer:TextField = new TextField();
private var startTime:int;
private var diff:int;
private var _timer2:Timer
private var _stage:MovieClip = container;
private var _frame:int;
private var fade:Number = 1.0;
private var fadeAmount:Number = 0.01;
private var _timer3:Timer = new Timer(25);
private var retval:Boolean = false;
var survive:TextField = new TextField();
var survivedTime:Number;
var isRight:Boolean=false
var isLeft:Boolean=false
var isUp:Boolean=false
var isDown:Boolean=false
var pause:TextField = new TextField();
var pausedes:TextField = new TextField();
public function Main()
{
_physics = new Physics(container);
_physics.enable();
_timer = new Timer(500);
_timer.addEventListener(TimerEvent.TIMER, timerFunction);
_timer.start();
start.addEventListener(MouseEvent.CLICK, buttonClickHandler);
credits.addEventListener(MouseEvent.CLICK, buttonClickHandler2);
}
// the event listeners
private function update(e:Event):void
{
var currentTime:int = getTimer();
var _ballArray:Array = _physics._ballArray;
var tempBall1:Ball;
var i:int;
//check if we hit top
if (((man.x - man.width/2) <= _physics._minX))
{
man.x += 7;
}
else if (((man.x + man.width/2) >= _physics._maxX))
{
man.x -= 7;
}
for (i = 0; i < _ballArray.length; i++)
{
// save a reference to ball
tempBall1 = _ballArray[i] as Ball;
if(_physics.hitTestCircle(tempBall1, man))
{
man.gotoAndStop(2);
retval = true;
stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyEvent);
stage.removeEventListener(KeyboardEvent.KEY_UP, upKey);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, downKey);
stage.removeEventListener(Event.ENTER_FRAME, move);
}
if(retval)
{
_physics.disable();
_timer2.stop();
survivedTime = diff;
_timer3.addEventListener(TimerEvent.TIMER, darken);
_timer3.start();
stage.removeEventListener(Event.ENTER_FRAME, update);
_physics._ballArray = [];
//trace("you died!");
retval = false;
}
}
diff = currentTime*0.001 - startTime*0.001;
interval_timer.text = String(diff);
}
private function darken(e:TimerEvent):void
{
fade-= fadeAmount;
if(fade < 0.0)
{
fade = 0.0;
_timer3.removeEventListener(TimerEvent.TIMER, darken);
_timer3.stop();
endGame();
}
container.transform.colorTransform = new ColorTransform(fade, fade, fade, 1.0, 0, 0, 0, 0);
}
private function downKey(event:KeyboardEvent)
{
if(event.keyCode==39)
{
isRight=true;
}
if(event.keyCode==37)
{
isLeft=true;
}
if(event.keyCode==38)
{
isUp=true
}
if(event.keyCode==40)
{
isDown=true
}
}
private function upKey(event:KeyboardEvent){
if(event.keyCode==39){
isRight=false}
if(event.keyCode==37){
isLeft=false}
if(event.keyCode==38){
isUp=false}
if(event.keyCode==40){
isDown=false}
}
private function move(e:Event)
{
if(isRight==true)
{
man.x +=5;
}
if(isLeft==true)
{
man.x -= 5;
}
}
private function frame(e:Event):void
{
_frame = currentFrame;
if(_frame == 25)
{
startGame();
}
}
private function startGame():void
{
_physics._ballArray = [];
stage.removeEventListener(Event.ENTER_FRAME, frame);
//stage.removeEventListener(Event.ENTER_FRAME, startGame);
stage.removeEventListener(Event.ENTER_FRAME, _physics.remove);
_physics.enable();
// enable physics simulation
_timer2 = new Timer(500);
_timer2.addEventListener(TimerEvent.TIMER, timerFunction);
_timer2.start();
stage.addEventListener(Event.ENTER_FRAME, update);
interval_timer.y = 18;
interval_timer.x = 500;
addChild(interval_timer);
startTime = getTimer();
}
private function endGame()
{
var myFormat:TextFormat = new TextFormat();
myFormat.size = 23;
survive.defaultTextFormat = myFormat;
gotoAndStop(26);
survive.x = 179.45;
survive.y = 177.90;
survive.textColor = 0xFFFFFF;
survive.text = String(survivedTime + " secs");
addChild(survive);
stage.addEventListener(Event.ENTER_FRAME, _physics.remove);
stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyEvent);
stage.removeEventListener(KeyboardEvent.KEY_UP, upKey);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, downKey);
stage.removeEventListener(Event.ENTER_FRAME, move);
mainmenu.addEventListener(MouseEvent.CLICK, buttonClickHandler5);
retry.addEventListener(MouseEvent.CLICK, buttonClickHandler6);
_physics._ballArray = [];
}
private function onKeyEvent(e:KeyboardEvent):void
{
if (stage.frameRate == 20)
{
if (e.keyCode == 80)
{
stage.frameRate = 8;
stage.removeEventListener(Event.ENTER_FRAME, update);
pauseGame();
}
}
else if (stage.frameRate == 8)
{
if (e.keyCode == 80)
{
stage.frameRate = 20;
stage.addEventListener(Event.ENTER_FRAME, update);
unpause();
}
}
}
private function pauseGame():void
{
_physics.disable();
_timer2.stop();
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyEvent);
stage.removeEventListener(KeyboardEvent.KEY_UP, upKey);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, downKey);
stage.removeEventListener(Event.ENTER_FRAME, move);
var myFormat:TextFormat = new TextFormat();
var myFormat2:TextFormat = new TextFormat();
myFormat.size = 30;
myFormat2.size = 15;
pause.defaultTextFormat = myFormat;
pausedes.defaultTextFormat = myFormat2;
pause.x = 239.95;
pause.y = 165.90;
pause.textColor = 0x000000;
pausedes.x = 221.8;
pausedes.y = 205.45;
pausedes.width = 130.2;
pausedes.textColor = 0x000000;
pause.text = String("Paused");
pausedes.text = String("Press P to Unpause");
addChild(pause);
addChild(pausedes);
}
private function unpause():void
{
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyEvent);
stage.addEventListener(KeyboardEvent.KEY_UP, upKey);
stage.addEventListener(KeyboardEvent.KEY_DOWN, downKey);
stage.addEventListener(Event.ENTER_FRAME, move);
_physics.enable();
_timer2.start();
removeChild(pause);
removeChild(pausedes);
}
public function timerFunction(e:TimerEvent):void
{
_physics.createBalls(1);
}
//start button
private function buttonClickHandler(event:MouseEvent):void
{
gotoAndStop(3);
ok.addEventListener(MouseEvent.CLICK, buttonClickHandler4);
_physics.disable();
_timer.stop();
_timer.removeEventListener(TimerEvent.TIMER, timerFunction);
stage.addEventListener(Event.ENTER_FRAME, _physics.remove);
_physics._ballArray = [];
}
//credits button
private function buttonClickHandler2(event:MouseEvent):void
{
gotoAndStop(2);
stage.addEventListener(Event.ENTER_FRAME, _physics.remove);
_physics.disable();
_timer.removeEventListener(TimerEvent.TIMER, timerFunction);
_timer.stop();
back.addEventListener(MouseEvent.CLICK, buttonClickHandler3);
_physics._ballArray = [];
}
//back button
private function buttonClickHandler3(event:MouseEvent):void
{
gotoAndStop(1);
_physics.enable();
_timer.addEventListener(TimerEvent.TIMER, timerFunction);
stage.removeEventListener(Event.ENTER_FRAME, _physics.remove);
_timer.start();
start.addEventListener(MouseEvent.CLICK, buttonClickHandler);
credits.addEventListener(MouseEvent.CLICK, buttonClickHandler2);
_physics._ballArray = [];
}
//ok button
private function buttonClickHandler4(event:MouseEvent):void
{
stage.addEventListener(KeyboardEvent.KEY_UP, upKey);
stage.addEventListener(KeyboardEvent.KEY_DOWN, downKey);
stage.addEventListener(Event.ENTER_FRAME, move);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyEvent);
gotoAndPlay(4);
stage.addEventListener(Event.ENTER_FRAME, frame);
_physics._ballArray = [];
//stage.addEventListener(Event.ENTER_FRAME, startGame);
}
//main menu button
private function buttonClickHandler5(event:MouseEvent):void
{
gotoAndStop(1);
container.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0);
removeChild(survive);
removeChild(interval_timer);
_physics.enable();
_timer.addEventListener(TimerEvent.TIMER, timerFunction);
stage.removeEventListener(Event.ENTER_FRAME, _physics.remove);
_timer.start();
start.addEventListener(MouseEvent.CLICK, buttonClickHandler);
credits.addEventListener(MouseEvent.CLICK, buttonClickHandler2);
_physics._ballArray = [];
fade = 1.0;
fadeAmount = 0.01;
}
//retry button
private function buttonClickHandler6(event:MouseEvent):void
{
container.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0);
removeChild(survive);
removeChild(interval_timer);
gotoAndPlay(4);
stage.addEventListener(Event.ENTER_FRAME, frame);
stage.addEventListener(KeyboardEvent.KEY_UP, upKey);
stage.addEventListener(KeyboardEvent.KEY_DOWN, downKey);
stage.addEventListener(Event.ENTER_FRAME, move);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyEvent);
_physics._ballArray = [];
fade = 1.0;
fadeAmount = 0.01;
man.x = 286.65;
man.y = 391.85;
man.gotoAndStop(1);
}
}
}
這是我使用,使該名男子的舉動文件。我在哪裏更改代碼以使遊戲正常工作,以便男士在「Go!」之後移動,而且您不必點擊屏幕。
我的另一個問題是:當你按「P」時,你可以暫停遊戲。但是,您可能會在通過再次按下「P」鍵取消暫停遊戲後注意到,計時器已關閉了您暫停的秒數。該代碼也是定時器的代碼。我在代碼中更改了哪些內容以使計時器正確運行,這意味着在暫停遊戲之後,它不會跳過暫停的秒數,而是從停止的位置繼續。
代碼不足。它在哪裏顯示「Go!」?你也沒有正確地清除移動的變量,我在向左移動時死亡,並且隨後的所有重試使得該人立即向左移動而無法取消移動。 – Vesper
關於使計時器工作排除暫停時間 - 不要使用'getTimer()'來代替這個,而是測量在同一個var'currentTime'中傳遞的幀,如果暫停,不要增加var。 – Vesper
它看起來像我「更新」是你移動的人。這是從startGame調用的,它只在buttonClickHandler4和buttonClickHandler6(KeyboardEvent的綁定位置)中調用。所以我不會指望這個人移動,直到其中一個點擊處理程序被調用。也許調用startGame並綁定constructer中的關鍵事件? – dhc