如何在Adobe动画CC AS3中使用鼠标事件行走游戏角色



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

注:在我之前的帖子中,我从时间轴创建了一个代码,但现在我把它转移到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时,问题就出现了。谢谢!

让我们回顾一下你的游戏循环

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次。好吧,我向你保证,在for循环运行的时候没有任何东西在移动,所以为什么要检查5次呢?我建议你退一步,向你的老师或其他人寻求帮助,因为这似乎太离谱了。对不起。

再次正确@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

这在循环引用

中有很好的解释

和ActionScript 3 fundamentals: Loops引用

我真丢脸!!;)

我是新手!: 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

最新更新