我正在使用Adobe Flash Professional CS6来制作游戏。我将发布代码。请注意,我使用Flash创建了两个不是由代码生成的符号。这些符号是十字标记符号和Hitbox符号。基本上,游戏的目标是单击Hitbox符号。我的问题是我遇到了瓶颈问题。当我使用快速计时器多次点击Hitbox符号时,分数不会注册。我压力地认为这来自(可能)无效的运动算法。但我似乎无法真正找到改进的空间。一些帮助将不胜感激。
请注意,我必须将计时器从Timer(1)
更改为Timer(30)
。这使得瓶颈问题变得更好,但让游戏变得不那么流畅。
Aah,以及为什么我使用directionCheckerY
和directionCheckerX
变量的原因是我稍后会在开发中添加随机移动。随机计时器会将这些更改为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);
}
答案 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;
}
// ...
}
希望可以提供帮助。