所以我有一个游戏,包括3帧,一个开始,规则和实际的游戏框架。
我希望有一张脸从中性表情到皱眉脸的图像,同时不断向下移动。 我知道要把它向下移动你可以做到
instancename.y += 10;
但是当它下降的时候,我怎么能让它每隔一段时间就皱起来呢?
我已经绘制了表达式的多个面,那么我需要皱眉呢?
我有photoshop,如果这有很大的不同,
答案 0 :(得分:1)
所以我不确定你想要皱眉脸的频率。它可以是随机时间,也可能是在一定距离之后,或者您可以使用Timer
进行设置,以指定的间隔运行。所以我会解释所有3。
首先是随机时间。您需要为此解决方案执行导入flash.utils.getTimer
。我假设你想让你皱着眉头留下皱眉的脸超过1毫秒。如果是这样的话那就是我要做的事情:
设置此成员变量:
private var beginTime:Number;
然后在运行第一个移动功能之前:
beginTime = getTimer();
在包含instancename.y
+ = 10;
private function loop():void {
instancename.y += 10;
//get our delta time
var dt:Number = getTimer() - beginTime;
//set random variable 50% chance to change the frame
var random:int = Math.random() * 2;
//dt > 3000 just means 3 seconds have passed, you can lower that number to decrease the delay before we change frames for the "face" animation
if ( random > 0 && dt > 3000 ) {
beginTime = getTimer();
if ( instancename.currentFrameLabel == "neutral" ) {
instancename.gotoAndPlay("frowning");
}
else {
instancename.gotoAndStop("neutral");
}
}
}
这将在随机时间更改帧,延迟时间为3000毫秒或3秒(随意更改)。
现在距离版本。所以这基本上只是说当我们从某个原点到达一定距离时,改变框架。但这取决于设置的几个变量:
//set the variable origin and a maxDistance
private var origin:Point = new Point( instancename.x, instancename.y );
private var maxDistance:int = 50;
//then in your loop or movement function
private function loop():void {
instancename.y += 10;
//when our distance is >= to our maxDistance, change the frame
if ( Point.distance( new Point( spr.x, spr.y ), origin ) >= maxDistance ) {
if ( instancename.currentFrameLabel == "neutral" ) {
instancename.gotoAndPlay("frowning");
}
else {
instancename.gotoAndStop("neutral");
}
//set the origin variable again
origin = new Point( instancename.x, instancename.y );
}
最后是计时器功能。使用TimerEvent.TIMER
的事件侦听器和要调用的函数
private var timer:Timer = new Timer(3000, 0);
然后在适用的地方设置:
timer.addEventListener(TimerEvent.TIMER, changeFrame);
timer.start(); //to start your timer
然后在计时器功能中:
private function changeFrame( e:TimerEvent ):void {
if ( instancename.currentFrameLabel == "neutral" ) {
instancename.gotoAndPlay("frowning");
}
else {
instancename.gotoAndStop("neutral");
}
}
不要忘记在使用完毕后停止它:timer.stop()
;
这是解决问题的几种方法。我应该注意到第二个解决方案(距离1)可以通过多种不同的方式进行优化,这只是一种方法。
希望这有帮助,祝你好运!