我有一个3个水平行的设置,每个水平行对齐一个按钮,并且我想在这些行之间移动一个字符(以每行为中心)(想想Little Big Planet)。我能够对它进行编程,以便角色在3行之间移动并且具有设定的比例,但是我希望看到角色实际在点之间移动;不只是看它传送到该位置。我已经尝试了我能想到的一切:循环,布尔开/关,一些速度/距离/差异恶作剧等,但我没有成功让它按下按钮点击并继续移动直到它到达它点。我也不确定它是否可以设置为逐步缩放,直到达到所需的最终刻度尺寸。我在一个网站上看到了一个稍微类似的问题,但是他们给出的解决方案使用了Point类和大量的数学,而且我从来没有成功让我的Flash使用Points。任何建议将不胜感激。
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main_Test_5 extends MovieClip
{
private var cam:MovieClip = new MovieClip();
private var player:Player = new Player();
private var topPosition:uint = 170;
private var centerPosition:uint = 270;
private var bottomPosition:uint = 370;
private var UI:UserInterface = new UserInterface();
private var testBackground:TestBackground = new TestBackground();
public function Main_Test_5():void
{
player.x = 100;
player.y = 370;
cam.addChild(player);
addChild (UI);
// 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);
addChild (cam);
}
public function checkEveryFrame(event:Event):void
{
cam.x -= player.x - player.x;
cam.y -= player.y - player.y;
}
public function topButtonClick (event:MouseEvent):void
{
trace ("Top Click");
if (player.y > topPosition) // 170, player.y starts at 370
{
player.y -= 100;
}
else if (player.y <= topPosition)
{
player.y = topPosition;
}
if (player.y == topPosition)
{
player.scaleY = 0.8;
player.scaleX = 0.8;
}
else if (player.y != topPosition)
{
player.scaleY = 0.9;
player.scaleX = 0.9;
}
}
public function centerButtonClick (event:MouseEvent):void
{
trace ("Center Click");
if (player.y > centerPosition) // 270
{
player.y -= 100;
}
if (player.y < centerPosition)
{
player.y += 100;
}
if (player.y == centerPosition)
{
player.scaleY = 0.9;
player.scaleX = 0.9;
}
}
public function bottomButtonClick (event:MouseEvent):void
{
trace ("Bottom Click");
if (player.y < bottomPosition) // 370
{
player.y += 100;
}
if (player.y >= bottomPosition)
{
player.y = bottomPosition;
}
if (player.y == bottomPosition)
{
player.scaleY = 1;
player.scaleX = 1;
}
else if (player.y != bottomPosition)
{
player.scaleY = 0.9;
player.scaleX = 0.9;
}
}
}
}
答案 0 :(得分:0)
听起来你喜欢简单的事情。所以我建议使用补间库。最多产的是Greensocks TweenLite, which is now part of their Animation Platform
使用tweenlite,您只需执行以下操作:
取代:
player.y += 100;
你会这样做:
TweenLite.to(player, 1,{y: player.y + 100, ease: Quad.EaseInOut});
这会将你的玩家对象从它的当前位置逐渐(随时间逐渐移动)到指定的y(player.y + 100)。它可以在1秒内完成并且具有良好的进出安全性。
您可以向补间(scaleX / Y,x)添加更多属性。
请注意,有许多补间平台替代品,包括一个融入Flash Professional的替代品。如果您向最终用户收取申请费用,TweenLite将无法免费使用。如果您在商业上使用它,请务必查看其许可证。