如何使子弹移动 Actionscript 3.0

Posted

技术标签:

【中文标题】如何使子弹移动 Actionscript 3.0【英文标题】:how do I make the bullet move Actionscript 3.0 【发布时间】:2017-01-26 12:20:09 【问题描述】:

我正在制作一个非常简单的 Flash 游戏来了解 AS3。我做了一个带有控件的圆环。当我按下空格时,我想发射子弹。我已经尝试过,while 循环和不同的教程,但我就是不知道如何做到这一点。 这是m代码:

import flash.net.drm.LoadVoucherSetting;

//controls 
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
var dir:String = "default";

function reportKeyDown(event:KeyboardEvent):void

if (event.keyCode == Keyboard.LEFT)

    ball_mc.x -=  10;
    dir = "venstre";

if (event.keyCode == Keyboard.RIGHT)

    ball_mc.x +=  10;
    dir = "hojre";

if (event.keyCode == Keyboard.UP)

    ball_mc.y -=  10;
    dir = "op";

if (event.keyCode == Keyboard.DOWN)

    ball_mc.y +=  10;
    dir = "ned";

if (event.keyCode == Keyboard.SPACE)

    shootBullet();



var speed1:int = 1;
function shootBullet():void

//instantiate your object
var bullet:Bullets = new Bullets  ;

//add it to the stage
addChild(bullet);

//object will default to x=0 , y=0 so you can define that as well
bullet.x = ball_mc.x;
bullet.y = ball_mc.y +(ball_mc.width/2);

bullet.y += 10 * 2;



stop();

【问题讨论】:

【参考方案1】:

要使其移动,您需要使用一些以一定间隔重复发生的事件。 一个Timer

var myTimer:Timer = new Timer(25);//interval, milliseconds
myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
myTimer.start();

var speedX:int = 0;
var speedY:int = 1;
function timerHandler(event:TimerEvent):void 
    bullet.y += speedX;
    bullet.x += speedY;

ENTER_FRAME 事件:

addEventListener(Event.ENTER_FRAME, onFrame);
function onFrame(event:Event):void 
    bullet.y += speedX;
    bullet.x += speedY;

【讨论】:

谢谢。我有一种感觉,我需要一些可以反复运行的东西。但是您如何将其合并到我的代码中。上面的计时器代码我试过了,但它不起作用,因为子弹是在按空格时首先创建的: @JohnDinh,您可以在shootBullet 函数之外声明var bullet:Bullets,并在增加速度之前检查if(bullet),以避免在事件处理程序中出现Error # 1009 (Null object reference)。另一种选择是将此代码移动到Bullets 类中并让它处理其坐标 无论如何,如果@www0z0k 是正确的,那么将 speedX 和 speedY 存储在单个变量上(在舞台上)不是一个好主意。如果您射出不止一颗子弹,所有子弹都将具有相同的 speedX 和 speedY 值。正如他所说,“另一种选择是将此代码移动到 Bullets 类中并让它处理其坐标”以及 speedX 和 speedY 值,因为它扩展了 MovieClip。您也可以考虑 TimerEvent,但如果您的 fps 较低,请不要忘记添加 timerEvent.updateAfterEvent 方法!

以上是关于如何使子弹移动 Actionscript 3.0的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3:子弹弹跳

ActionScript 3.0 当你单击一个对象时,我如何使它进入下一个场景?

如何在 Adob​​e Flash Professional CS6 Action Script 3.0 中阻止可移动对象(通过箭头键移动)离开舞台

如何从 Actionscript 3.0 中的数组 B 中的数组 A 中删除元素?

如何在 Actionscript 3.0 中获取数组的所有排列?

Actionscript 2.0 变量和按钮问题