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.currentTargetcurrentTarget 与鼠标移动监听器对话)。没有 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) 的对象的目标引用。因此,如果您想移动不止一件事,只需将它们全部相同addEventrota.addEvent... 相同,但您可以看到该函数目前仅移动rota,因此通过将代码更改为使用evt.rotationevt.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 我的代码

actionscript 2 碰撞检测

附加到 XMLNode 的 XMLNodes 是“未定义的”? Actionscript 2.0 不友善

在 ActionScript 2 中解析 JSON

ActionScript 3.0 通过按键切换视频