试图创建一个非常基本的游戏,但遇到一些瓶颈问题(我认为)!

时间:2015-10-15 11:10:53

标签: performance actionscript-3 flash

我正在使用Adobe Flash Professional CS6来制作游戏。我将发布代码。请注意,我使用Flash创建了两个不是由代码生成的符号。这些符号是十字标记符号和Hitbox符号。基本上,游戏的目标是单击Hitbox符号。我的问题是我遇到了瓶颈问题。当我使用快速计时器多次点击Hitbox符号时,分数不会注册。我压力地认为这来自(可能)无效的运动算法。但我似乎无法真正找到改进的空间。一些帮助将不胜感激。

请注意,我必须将计时器从Timer(1)更改为Timer(30)。这使得瓶颈问题变得更好,但让游戏变得不那么流畅。

Aah,以及为什么我使用directionCheckerYdirectionCheckerX变量的原因是我稍后会在开发中添加随机移动。随机计时器会将这些更改为0和1,从而产生随机移动。

import flash.events.MouseEvent;
import flash.events.TimerEvent;

// Variables

var directionCheckerX:int=0;
var directionCheckerY:int=0;
var pointChecker:int=0;

// Croshair

var crosshair:Crosshair = new Crosshair();
addChild(crosshair);
Mouse.hide();

function moveCrossEvent (evt: MouseEvent) {
    crosshair.x = mouseX;
    crosshair.y = mouseY;
    evt.updateAfterEvent();
}

// Hitbox

var hitbox:Hitbox = new Hitbox();
addChild(hitbox);
hitbox.x=50;
hitbox.y=50;

// Timer

var myTimer:Timer = new Timer(30);
myTimer.addEventListener(TimerEvent.TIMER, timerEvent);
myTimer.start();
function timerEvent(evt:TimerEvent) {
    // Border code (Keeps the Hitbox away from out of bounds)
    if (hitbox.x <= 0) {
        directionCheckerX = 1;
    } else if (hitbox.x >= 550) {
        directionCheckerX = 0;
    }
    if (directionCheckerX == 0) {
        hitbox.x-=2;
    } else {
        hitbox.x+=2;
    }
    if (hitbox.y <= 0) {
        directionCheckerY = 1;
    } else if (hitbox.y >= 400) {
        directionCheckerY = 0;
    }
    if (directionCheckerY == 0) {
        hitbox.y-=2;
    } else {
        hitbox.y+=2;
    }
}

// EventListeners

stage.addEventListener(MouseEvent.MOUSE_MOVE, moveCrossEvent); 
hitbox.addEventListener(MouseEvent.CLICK, hitboxEvent);
stage.addEventListener(MouseEvent.CLICK, stageEvent);

function hitboxEvent (evt:MouseEvent) {
    pointChecker+=1;
    outputTxt.text = String(pointChecker);
    evt.stopImmediatePropagation();
    //evt.updateAfterEvent();
}
function stageEvent(evt:MouseEvent) {
    pointChecker-=1;
    outputTxt.text = String(pointChecker);
}

1 个答案:

答案 0 :(得分:0)

要说清楚,我不是游戏开发者。

实际上,有时间隔为1毫秒的Timer与间隔为30毫秒的另一个间隔没有太大区别,因为它是depending on the SWF file's framerate or the runtime environment ...但是在这里,使用Event.ENTER_FRAME事件代替一个Timer?因为Adobe说{4}关于计时器与ENTER_FRAME事件:

  

选择计时器或ENTER_FRAME事件,具体取决于内容是否已设置动画。

     

对于长时间执行的非动画内容,定时器优先于Event.ENTER_FRAME事件。

在你的情况下,内容是动画的(即使你的游戏仍然是基本的)。

然后您可以使用var来设置hitbox的速度,您可以随时更新:

var speed:int = 2;

function timerEvent(evt:TimerEvent): void 
{    
    // ...

    if (directionCheckerX == 0) {
        hitbox.x -= speed;
    } else {
        hitbox.x += speed;
    }

    // ...

}

希望可以提供帮助。