AS3使敌人向鼠标移动 包{ 输入敌人; 导入flash.display.Sprite; 导入flash.events.*; 公共类Main扩展了Sprite{ //存放敌人的地方 公敌:敌人; 私有函数handleEnterFrame(e:事件):void{ tweenIt(敌方x,mouseX,2); } 私有函数tweenIt(变量:Number,目标:Number,速度:Number):void{ if(变量目标){ 可变-=速度; } } //这是在我们的应用程序中运行的第一个代码 公共函数Main():void{ addEventListener(Event.ENTER_FRAME,HandleInterframe); //我们创造了敌人,并将其储存在我们的变量中 敌人=新敌人(); //我们把敌人添加到舞台上 addChild(敌人) 敌方.x=Math.random()*stage.stageWidth; friend.y=Math.random()*stage.stageHeight; } } }
敌方类嵌入了位图。我正在使用FlashDevelop进行编程。当我执行类似于敌方.x+=1的操作时,它会工作,但当我尝试使用tween-it脚本时,无论鼠标的位置如何,敌方都会静止不动。 非常感谢。 Blobstah您正在将敌人的AS3使敌人向鼠标移动 包{ 输入敌人; 导入flash.display.Sprite; 导入flash.events.*; 公共类Main扩展了Sprite{ //存放敌人的地方 公敌:敌人; 私有函数handleEnterFrame(e:事件):void{ tweenIt(敌方x,mouseX,2); } 私有函数tweenIt(变量:Number,目标:Number,速度:Number):void{ if(变量目标){ 可变-=速度; } } //这是在我们的应用程序中运行的第一个代码 公共函数Main():void{ addEventListener(Event.ENTER_FRAME,HandleInterframe); //我们创造了敌人,并将其储存在我们的变量中 敌人=新敌人(); //我们把敌人添加到舞台上 addChild(敌人) 敌方.x=Math.random()*stage.stageWidth; friend.y=Math.random()*stage.stageHeight; } } },flash,actionscript-3,mouse,flashdevelop,enterframeevent,Flash,Actionscript 3,Mouse,Flashdevelop,Enterframeevent,敌方类嵌入了位图。我正在使用FlashDevelop进行编程。当我执行类似于敌方.x+=1的操作时,它会工作,但当我尝试使用tween-it脚本时,无论鼠标的位置如何,敌方都会静止不动。 非常感谢。 Blobstah您正在将敌人的x位置的值传递给您的tweenIt函数,更改该值,然后丢弃结果 换句话说,变量是与敌方.x不同的变量,尽管它的起始值来自敌方.x 解决此问题的一种方法是将参数更改为实际敌人的参考: package { import enemies.Enemy; import flas
x
位置的值传递给您的tweenIt
函数,更改该值,然后丢弃结果
换句话说,变量
是与敌方.x
不同的变量,尽管它的起始值来自敌方.x
解决此问题的一种方法是将参数更改为实际敌人的参考:
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;
}
}
}
私有函数handleEnterFrame(e:事件):无效{
tweenIt(敌人,mouseX,2);
}
私有函数tweenIt(敌人:敌人,目标:数字,速度:数字):无效{
如果(anEnemy.x<目标){
anEnemy.x+=速度;
}
// ...
}
您正在将敌人的x
位置的值传递给您的tweenIt
函数,更改该值,然后丢弃结果
换句话说,变量
是与敌方.x
不同的变量,尽管它的起始值来自敌方.x
解决此问题的一种方法是将参数更改为实际敌人的参考:
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;
}
}
}
私有函数handleEnterFrame(e:事件):无效{
tweenIt(敌人,mouseX,2);
}
私有函数tweenIt(敌人:敌人,目标:数字,速度:数字):无效{
如果(anEnemy.x<目标){
anEnemy.x+=速度;
}
// ...
}
我不是AS3开发人员,因此如果您的代码有任何问题,我无法帮助您,但如果您不确定如何通过数学方法将敌人移向鼠标,请看下面的方法。(这不是代码,只是您想要计算的一般jist。我相信您可以将其转换为AS3。)
首先,找出敌人和你的鼠标之间的距离
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;
}
// ...
}
然后,找到将敌人指向鼠标所需的旋转
xDistance = enemyPositionX - mousePositionX;
yDistance = enemyPositionY - mousePositionY;
最后,这里是您想要在tweenIt函数中添加的内容,以将敌人移向鼠标(每个函数调用3个像素)
就这样!我之所以称赞它,是因为我在这里学会了如何做到这一点。我不是AS3开发人员,所以如果您的代码有任何问题,我无法帮助您,但如果您不确定如何在数学上将敌人移向鼠标,下面是如何做到的。(这不是代码,只是您想要计算的一般jist。我相信您可以将其转换为AS3。) 首先,找出敌人和你的鼠标之间的距离
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;
}
// ...
}
然后,找到将敌人指向鼠标所需的旋转
xDistance = enemyPositionX - mousePositionX;
yDistance = enemyPositionY - mousePositionY;
最后,这里是您想要在tweenIt函数中添加的内容,以将敌人移向鼠标(每个函数调用3个像素)
就这样!我之所以称赞卡梅伦,是因为我在这里学会了如何做到这一点。所以,我要补充卡梅伦的答案 您可以创建一个更通用的函数来更改变量。我将在下面演示一个小示例
enemyPositionX -= 3 * cos(rotation);
enemyPositionY -= 3 * sin(rotation);
上述函数将更新所需变量的当前值,因此如果要键入以下内容:
private function tweenIt(anEnemy:Enemy, variableName:String, value:Number):void
{
anEnemy[variableName] = value;
}
这会将你的敌人物体的宽度更新为200:),这应该可以做到:)所以,要补充卡梅隆的答案 您可以创建一个更通用的函数来更改变量。我将在下面演示一个小示例
enemyPositionX -= 3 * cos(rotation);
enemyPositionY -= 3 * sin(rotation);
上述函数将更新所需变量的当前值,因此如果要键入以下内容:
private function tweenIt(anEnemy:Enemy, variableName:String, value:Number):void
{
anEnemy[variableName] = value;
}
这会将你的敌人对象的宽度更新为200:),这应该可以做到:)有没有其他方法可以更普遍地做到这一点?比如,让它和我扔给它的变量一起工作?thanx@Jonh:哦,不。你必须想其他方法来抽象它(想到接口和多态性)
blah+=4
只是blah=blah+4
的简写;显然,blah+4
部分将产生正确的值,但它不是被指定给对象的属性,而是被指定给blah
(因此,您正在更改变量的值,但该变量与对象的属性完全无关--唯一的链接是该属性用于确定传递给函数的原始值)这实际上是可以做到的..anEnemy[“variableName”]=value;如果您使用它,它应该可以做到这一点:)@Michiel:Ooh,我忘了。你应该加上这一点作为回答。有没有更普遍的方式来做这件事?比如,让它和我扔给它的变量一起工作?thanx@Jonh:哦,不。你必须想其他方法来抽象它(想到接口和多态性)blah+=4
只是blah=blah+4
的简写;显然,blah+4
部分将产生正确的值,但不是指定给对象的属性,而是