如何在Adobe Animate CC AS3中使用鼠标事件来游戏角色?

时间:2016-11-14 16:28:04

标签: actionscript-3 flash

这个问题与我以前的帖子“TypeError: Error #1010: A term is undefined and has no properties” in AS3有关,因为正如我在那里提到的,我正在为我们的论文创建一个Android游戏。现在,我在链接中有一个角色的spritesheet:sprite character,我在游戏中使用它。我正在研究如何走一个角色,我在一个网站找到了一个,它实际上有效,但不幸的是,它失败了,因为角色实际上没有走路。我不知道将在那里放置什么代码。我要么通过点击鼠标来走一个角色,要么我会创建一个按钮,然后点击它来走一个角色。我可以使用什么代码?任何帮助将不胜感激。

P.S。在我之前的帖子中,我正在创建一个来自时间轴的代码,但现在我将它转移到Actionscript文件,因为有些错误。

编辑: 这是我的角色代码:

forward.addEventListener(MouseEvent.CLICK, ppap);
function ppap(event:MouseEvent):void{
    gril.x += mouseX;
    gril.y += mouseY;
    gril.gotoAndStop('i');
    gameloop();
}

function gameloop(): void {
    for (var o = 0; o > 5; o++) {
        if (linya.hitTestObject(gril)) {
            o++;
            gotoAndStop(2);
            scorer.visible = true;
            timer.visible = true;
        }
    }
}

该字符所在的行gril.gotoAndStop('a');

gril是角色的实例名称。当它到达linya时,会出现问题。谢谢!

2 个答案:

答案 0 :(得分:1)

让我们走过你破碎的游戏循环

function gameloop(): void {
for (var o = 0; o > 5; o++) { //sets o to 0, loops as long as o > 5 (which it isn't, since we just set it to 0;
    if (linya.hitTestObject(gril)) {
        o++; //this also adds 1 to o
        gotoAndStop(2);
        scorer.visible = true;
        timer.visible = true;
    }
// if this part ever executed, it would add 1 to o
}
}

你看到了问题吗?这个for循环甚至不会执行一次,因为0< 5

相反它应该是

function gameloop(): void {
for (var i  = 0; i < 5; i++) {
    if (linya.hitTestObject(gril)) {
        gotoAndStop(2);
        scorer.visible = true;
        timer.visible = true;
        break;
    }
}
}

所以这里我们有一个功能(但没有意义)for循环。它会起作用,但第一次通过循环它会产生与第二和第三,第四和第五次完全相同的东西,因为将变量值改为1实际上并没有改变任何东西。你只是告诉程序检查碰撞状态5次。好吧,在其他任何可以改变之前,它会做5次。它会在每个游戏循环中检查5次。好吧,我保证在循环运行时没有任何动静,为什么要检查5次?我建议退一步,从你的老师那里得到一些帮助,因为这似乎已经过时了。抱歉。

答案 1 :(得分:0)

再次@NealDavis再次感谢你的评论! 我写的评论太快了

从0-> 4(5项)的升序循环:

for (var i:uint = 0; i < 5; i++){
    trace("ascending = " + i);
}

输出:

ascending = 0
ascending = 1
ascending = 2
ascending = 3
ascending = 4

从4-> 0(5项)下降循环:

for (var j:int = 4; j>=0; j--){
// j must be an int in this case, second mistake!
    trace("descending = " + j)
};

输出:

descending = 4
descending = 3
descending = 2
descending = 1
descending = 0

我的错误。 SRY

Looping reference

对此进行了详细解释

并在ActionScript 3 fundamentals: Loops reference

羞辱我!!! ;)

我是菜鸟! :d

所以我删除了我的评论;)

哇,我很抱歉这个错误!

// You may also create Vectors to store the values.

var ascending:Vector.<uint> = new Vector.<uint>;
var descending:Vector.<uint> = new Vector.<uint>;

for (var k:uint = 0; k < 5; k++){
    ascending.push(k+1);
}
trace("ascending Vector.<uint> = " + ascending);
// Output : ascending Vector.<uint> = 1,2,3,4,5

for (var l:int = 4; l >= 0; l--){
    descending.push(l+1);
}
trace("descending Vector.<uint> = " + descending);
// Output : descending Vector.<uint> = 5,4,3,2,1

或者在上升循环中:

trace("\nascending Vector.<uint> loop : ")
for(var m:String in ascending){
    trace(m + " = " + ascending[m]);
}

输出:

ascending Vector.<uint> loop : 
0 = 1
1 = 2
2 = 3
3 = 4
4 = 5

或者在下降循环中:

trace("descending Vector.<uint> loop : ")
for(var n:String in descending){
    trace(n + " = " + descending[n]);
}

输出:

descending Vector.<uint> loop : 
0 = 5
1 = 4
2 = 3
3 = 2
4 = 1