package {
import enemies.Enemy;
import flash.display.Sprite;
import flash.events.*;
public class Main extends Sprite {
// a place to store the enemy
public var enemy:Enemy;
private function handleEnterFrame(e:Event):void {
tweenIt(enemy.x, mouseX, 2);
}
private function tweenIt(variable:Number, target:Number, speed:Number):void{
if (variable < target) {
variable += speed;
}
if (variable > target) {
variable -= speed;
}
}
// this is the first code that is run in our application
public function Main():void {
addEventListener(Event.ENTER_FRAME, handleEnterFrame);
// we create the enemy and store him in our variable
enemy = new Enemy();
// we add the enemy to the stage
addChild(enemy)
enemy.x = Math.random() * stage.stageWidth;
enemy.y = Math.random() * stage.stageHeight;
}
}
}
敌人类有一个位图嵌入其中。我正在使用FlashDevelop进行编程。当我做像enemy.x + = 1这样的东西时,它可以工作,但是当我尝试使用我的补间时,无论鼠标的位置是什么,它都会让敌人站立不动。 谢谢, Blobstah
答案 0 :(得分:3)
我不是AS3开发人员,所以如果您的代码出现任何问题我无法帮助您,但如果您不确定如何以数学方式将敌人移向鼠标,那么就是这样。 (这不是代码,只是你想要计算的一般要点。我相信你可以把它转换成AS3。)
首先,找到敌人和你的鼠标之间的距离。
xDistance = enemyPositionX - mousePositionX;
yDistance = enemyPositionY - mousePositionY;
然后,找到将敌人指向鼠标所需的旋转。
rotation = atan2(yDistance, xDistance);
最后,这里是你想要放在你的tweenIt函数中以将敌人移向鼠标(每个函数调用3个像素)。
enemyPositionX -= 3 * cos(rotation);
enemyPositionY -= 3 * sin(rotation);
那应该是它!我赞扬Be Recursive,因为这是我学会如何做到的地方。
答案 1 :(得分:1)
您将敌人的x
位置的值传递给您的tweenIt
函数,更改该值,然后将结果丢弃。
换句话说,variable
是一个不同的变量而不是enemy.x
,即使它从enemy.x
得到了它的起始值。
解决此问题的一种方法是将参数更改为实际敌人的参考:
private function handleEnterFrame(e:Event):void {
tweenIt(enemy, mouseX, 2);
}
private function tweenIt(anEnemy:Enemy, target:Number, speed:Number):void{
if (anEnemy.x < target) {
anEnemy.x += speed;
}
// ...
}
答案 2 :(得分:0)
所以,要添加Cameron的答案
你可以做一个更通用的功能来改变变量。我将在下面演示一个小例子
private function tweenIt(anEnemy:Enemy, variableName:String, value:Number):void
{
anEnemy[variableName] = value;
}
上述函数将更新所需变量的当前值,因此如果要键入以下内容:
tweenIt(enemy, "width", 200);
这会将敌人对象的宽度更新为200 :)这应该可以解决问题:)