我在flash中编码动画状态变化时遇到了麻烦 . 我有一个小行星风格的游戏,有3个水平行,角色可以跳跃 . 我在补间中设置了动画,但是我无法让角色从运行动画转换为跳回/跳转动画,然后在完成图层之间的转换后返回运行动画 .
运行动画帧是1 - 60,跳回一层是61,向前跳一层是62.我还没有开始担心静止,所以它没有帧 .
编辑:我删除了anmatePlayer函数并将动画控制代码移动到checkEveryFrame函数中 . 我只为动画制作了一个单独的功能,因为我不确定它应该去哪里 .
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
public class Main_Test_2 extends MovieClip
{
// variables
private var cam:MovieClip = new MovieClip();
private var player:Player = new Player();
private var topPosition:uint = 250;
private var centerPosition:uint = 430;
private var bottomPosition:uint = 610;
private var tweenSpeed:Number = 0.33;
private var UI:UserInterface = new UserInterface();
public function Main_Test_2():void
{
// initialize
init();
}
public function init():void
{
// initialize variables
stage.addChild (cam);
player.x = 200;
player.y = bottomPosition;
cam.addChild (UI);
cam.addChild (player);
// add event listeners
stage.addEventListener(Event.ENTER_FRAME, checkEveryFrame);
UI.topButton.addEventListener(MouseEvent.CLICK, topButtonClick);
UI.centerButton.addEventListener(MouseEvent.CLICK, centerButtonClick);
UI.bottomButton.addEventListener(MouseEvent.CLICK, bottomButtonClick);
}
public function checkEveryFrame(event:Event):void
{
cam.x -= player.x - player.x;
cam.y -= player.y - player.y;
player.vx = player.x - player.prevX;
player.vy = player.y - player.prevY;
player.prevX = player.x;
player.prevY = player.y;
/*if (player.y != topPosition || player.y != centerPosition || player.y != topPosition)
{
player.gotoAndStop (61);
}
else if (player.y == topPosition || player.y == centerPosition || player.y == topPosition)
{
player.gotoAndStop (1);
}*/
if (player.currentFrame == 60)
{
player.gotoAndStop (1);
}
else if (player.currentFrame < 60)
{
player.gotoAndStop (player.currentFrame + 1);
}
/*if (player.y < player.prevY)
{
player.gotoAndStop (61);
}
else if (player.y > player.prevY)
{
player.gotoAndStop (62);
}
else if (player.vy == 0)
{
player.gotoAndStop (1);
}*/
}
public function topButtonClick (event:MouseEvent):void
{
trace ("Top Click");
if (player.y >= bottomPosition)
{
var tween01:Tween = new Tween (player, "y", None.easeNone, bottomPosition, centerPosition, tweenSpeed, true);
}
else if (player.y == centerPosition)
{
var tween02:Tween = new Tween (player, "y", None.easeNone, centerPosition, topPosition, tweenSpeed, true);
}
else if (player.y < topPosition)
{
player.y = topPosition;
}
}
public function centerButtonClick (event:MouseEvent):void
{
trace ("Center Click");
if (player.y > centerPosition)
{
var tween01:Tween = new Tween (player, "y", None.easeNone, bottomPosition, centerPosition, tweenSpeed, true);
}
else if (player.y < centerPosition)
{
var tween03:Tween = new Tween (player, "y", None.easeNone, topPosition, centerPosition, tweenSpeed, true);
}
}
public function bottomButtonClick (event:MouseEvent):void
{
trace ("Bottom Click");
if (player.y <= topPosition)
{
var tween03:Tween = new Tween (player, "y", None.easeNone, topPosition, centerPosition, tweenSpeed, true);
}
else if (player.y == centerPosition)
{
var tween4:Tween = new Tween (player, "y", None.easeNone, centerPosition, bottomPosition, tweenSpeed, true);
}
else if (player.y > bottomPosition)
{
player.y = bottomPosition;
}
}
}
}
2 回答
看到实际调用
animatePlayer
的代码会很有帮助;不管,下面是一个解决方案 .您可以在现有的
checkEveryFrame
中处理它,而不是依赖MovieClip
进行动画制作,从而为您提供更精确的控制,以便在您需要时准确地更改动画状态 . 我为了演示而添加了playerState
更改了UI点击 .尽管我可以告诉,这应该编译,但我没有其余的对象我无法尝试 .
好的,我解决了这个问题 . 我不得不使用一个在计时器用完后执行其动作的计时器 . 我放置它和一行代码来改变每行代码中的状态与补间,因此动画将从运行转到跳转前进/后退动画,然后返回到计时器结束时运行 . 希望这有助于将来的其他人 .