这个问题与我以前的帖子“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
时,会出现问题。谢谢!
答案 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
对此进行了详细解释并在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