actionscript 2 到 actionscript 3 我的代码
Posted
技术标签:
【中文标题】actionscript 2 到 actionscript 3 我的代码【英文标题】:actionscript 2 to actionscript 3 my code 【发布时间】:2017-09-03 05:45:46 【问题描述】:有人可以帮我把这段代码从 as2 转换成 as3 吗?
对于一个简单的圆圈,我希望当我将鼠标光标向右移动时,圆圈旋转(不需要移动鼠标光标但圆圈仍在旋转)
我知道 _root._xmouse
转到 mouseX 并且 this._rotation
转到 this.DisplayObject.rotation
onClipEvent(enterFrame)
this.xmouse = Math.min(908, Math.max(0, _root._xmouse));
if (_root._xmouse > 0)
var offset = Stage.width / 2 - this.xmouse;
this._rotation = this._rotation + offset / 2000;
else
this._rotation = this._rotation - 0.02;
this._rotation = this._rotation % 180;
AS3 版本:
stage.addEventListener( Event.ENTER_FRAME, mouseOver );
function mouseOver( e: Event ) : void
rota.mouseX == Math.min(908, Math.max(0, stage.mouseX));
if (stage.mouseX > 0)
var offset = stage.stage.width / 2 - rota.mouseX;
rota.rotation = rota.rotation + offset / 2000;
else
rota.rotation = rota.rotation - 0.02;
rota.rotation = rota.rotation % 180;
【问题讨论】:
“不需要移动我的鼠标光标,但圆圈仍在旋转”...EnterFrame
就是这样做的。它以 SWF 的 FPS 速率重复代码。也许您希望 Mouse_Move
侦听器中的代码逻辑?显示您尝试制作的 AS3 版本代码,更容易帮助您修复它。
是的,也许是 mouse_move 监听器,这个 as2 代码如何工作(作为 as3 代码)...?
我们需要查看您目前拥有的 AS3 代码,以展示如何应用 as2 逻辑。例如:没有人知道您的圈子变量名称等。您可以将this
替换为您的圈子变量名称,并将其用作circleName.rotation = circleName.rotation % 180;
等
“为我转换此代码” 和 “编写我的代码” 问题不适用于 ***。请参阅How to Ask
.. 我愿意帮助纠正您在 AS3 工作中的任何错误。使用 edit
按钮添加您的 AS3 工作以获得更快的答案。不管怎样 _root.
是 AS3 stage.
等等。this
也不是必需的,所以要么使用 test
要么 event.currentTarget
(currentTarget 与鼠标移动监听器对话)。没有 AS3 代码来查看真的很难给你建议。
好的,我添加了 as3 版本。
【参考方案1】:
这应该可行:
var offset : int = 0; //declare the variable (integer)
//stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoving );
rota.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoving );
function mouseMoving ( evt : Event ) : void
rota.x = stage.mouseX; //Math.min(908, Math.max(0, stage.mouseX));
if (stage.mouseX > 0)
offset = stage.stage.width / 2 - rota.mouseX;
rota.rotation = rota.rotation + offset / 2000;
else
rota.rotation = rota.rotation - 0.02;
rota.rotation = rota.rotation % 180;
注意事项/提示:
尽可能在函数之外声明变量。
( evt : Event )
中的evt
是您对附加了.addEventListener(MouseEvent.MOUSE_MOVE)
的对象的目标引用。因此,如果您想移动不止一件事,只需将它们全部相同addEvent
与rota.addEvent...
相同,但您可以看到该函数目前仅移动rota
,因此通过将代码更改为使用evt.rotation
和evt.mouseX
等...evt
现在可以通用任何听该mouseMoving
函数的东西。
编辑(基于 cmets):
变量speed
设置旋转速度。对于rotation
,通过-=
或+=
设置方向。
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoving ); //Stage : for direction
rota.addEventListener(Event.ENTER_FRAME, mouseRotating); //Object : for spin/rotate
var prevX:int = 0;
var currX:int = 0;
var directX: int = 0; //will update to 1=Left or 2=Right
var speed : int = 7; //speed of rotation
function mouseMoving ( evt : Event ) : void
prevX = currX; currX = stage.mouseX;
if (prevX > currX) directX = 1; //moving = LEFT
else if (prevX < currX) directX = 2; //moving = RIGHT
//else directX = 0; //moving = NONE
function mouseRotating ( evt : Event ) : void
evt.target.x = stage.mouseX; //follow mouse
if ( directX == 1 ) evt.currentTarget.rotation -= speed;
if ( directX == 2 ) evt.currentTarget.rotation += speed;
【讨论】:
我喜欢这个谢谢! ,以及如果我想让那个圆圈继续向右移动,如果我向右移动鼠标然后我停止移动鼠标但圆圈仍然向右旋转(向左旋转),我该怎么办 谢谢,但您现在可以不接受答案吗?我试图将我的代表分数提高到6-6-6-6
对朋友开玩笑,而✓
已经把它推得太远了。你可以在周末等之后再点赞。
我需要先上 Flash。也许在 1 小时内。此外,我认为您需要与其他 AS2 和 AS3 代码不同的逻辑。您需要学位而不是.rotation % 180;
等...
嗯..我等着! :) 谢谢
@romania 检查新的 edit 是否符合您的要求? PS:那个“1 小时内” 应该是“1 天内”。告诉我进展如何。以上是关于actionscript 2 到 actionscript 3 我的代码的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3:字符命中测试对象,所有对象都在数组中
actionscript 2 到 actionscript 3 我的代码