flash pro 中的动画实例
Posted
技术标签:
【中文标题】flash pro 中的动画实例【英文标题】:Animating instances in flash pro 【发布时间】:2014-02-08 06:53:15 【问题描述】:所以我有一个游戏,它由 3 帧、开始、规则和实际游戏帧组成。
我想要一张脸的图像从中性表情变成皱眉的脸,同时不断地向下移动。 我知道你可以把它移下来
instancename.y += 10;
但是当它下降的时候,我怎么能让它不时皱起眉头?
我已经画了表情的多张脸,那我需要什么让它皱眉呢?
如果这有很大的不同,我有 Photoshop,
【问题讨论】:
你想让皱眉的脸随机出现吗?或者在一个固定的时间 我更喜欢随机,但如果代码/我需要为设置时间做的事情更短更容易,那么我想我会设置时间。 【参考方案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()
;
这些是解决问题的几种方法。我应该注意,第二种解决方案(距离之一)可以通过多种不同的方式进行优化,这只是其中一种方式。
希望这会有所帮助,祝你好运!
【讨论】:
谢谢,这很好,但我会吃很多吗?有什么方法可以编辑符号/实例本身以使其在多个帧中循环? 你为什么不直接使用 gotoAndPlay? 我从未听说过?你能给我一个简单的解释吗? Livedocs 是你最好的朋友:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… 我也更新了随机版本,做了一点小改动,意识到我复制/粘贴了一个错误,dt = getTimer()
应该是beginTime = getTimer()
以上是关于flash pro 中的动画实例的主要内容,如果未能解决你的问题,请参考以下文章