我是新来的,需要一些帮助。基本上我正在设计一个类似吃豆人的游戏,它必须基于柳树上的风,所以鼹鼠就是!!
无论如何,我已经完成了它的基础知识,我已经制作了我的2d鼹鼠,让他移动,让他对按钮按等做出反应,现在试图让墙壁工作,从外墙开始。
我在边缘周围做了4个矩形,将它们合并为一个形状并称之为“outerWalls”。我一直在使用hitTestObject尝试让它工作但没有成功。
我做了一个测试,使它与moleman.xIncrement = -5一起使用,这使他立即向后移动而不会碰到任何墙壁。我很好奇,如果这是因为他是在墙内,它将4个外墙整体划分为方形,而他已经在理论广场内部将他移出?我不确定。有一些代码!!
动作图层 - 第1帧:
import flash.events.KeyboardEvent;
var moleman = this.addChild(new Moleman_mc());
moleman.x = 100;
moleman.y = 200;
moleman.width = 24;
moleman.height = 24;
moleman.xIncrement = 5;
moleman.yIncrement = 0;
stage.addEventListener(KeyboardEvent.KEY_DOWN, doKeyDown);
function doKeyDown (e:KeyboardEvent):void
{
switch(e.keyCode)
{
case Keyboard.UP:
moleman.xIncrement = 0;
moleman.yIncrement = -5;
moleman.rotation = -90;
break;
case Keyboard.DOWN:
moleman.xIncrement = 0;
moleman.yIncrement = 5;
moleman.rotation = 90;
break;
case Keyboard.LEFT:
moleman.xIncrement = -5;
moleman.yIncrement = 0;
moleman.rotation = 180;
break;
case Keyboard.RIGHT:
moleman.xIncrement = 5;
moleman.yIncrement = 0;
moleman.rotation = 0;
break;
}
}
动作图层 - 第2帧:
import flash.events.Event;
var collectCounter:int = 0;
moleman.x += moleman.xIncrement;
moleman.y += moleman.yIncrement;
if(moleman.hitTestObject(collect))
{
collectCounter ++;
collect.visible = false;
}
moleman.addEventListener(Event.ENTER_FRAME, wallHit);
function wallHit(event:Event):void
{
if(moleman.hitTestObject(outerWalls))
{
moleman.stop();
}
}
动作图层 - 第3帧:
gotoAndPlay(2);
另外,我不能让收集(例如收藏品)工作,计划是这样做,所以每当你收集一个“收集”项目,一个消失,你添加一个到collectCounter但所有其他人保持可见。目前,如果你收集一个“收集”项目,鼹鼠只是停下来并停留在他所在的位置,而另一个鼹鼠出现并继续,不是很有用。任何有关这方面的帮助也将受到赞赏,不知道从哪里拿走它。
任何帮助都非常感谢,我是新手,但希望它能顺利进行:)
非常感谢所有帮助。 约翰。
答案 0 :(得分:0)
在您检测碰撞的情况下,您应该使用hitTestPoint方法而不是hitTestObject。 hitTestPoint方法有签名:
public function hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean
因此,当shapeFlag设置为true时,可以检测与点(您的英雄)和迷宫形状(或任何其他任意形状)的碰撞。这种方法非常强大,因为计算了与实际形状的交集,而不是其边界框。修改后的wallHit方法可能如下所示:
moleman.addEventListener(Event.ENTER_FRAME, wallHit);
function wallHit(event:Event):void
{
if(outerWalls.hitTestPoint(moleman.x, moleman.y, true))
{
// collision
moleman.x += -moleman.xIncrement;
moleman.y += -moleman.yIncrement;
moleman.xIncrement=0;
moleman.yIncrement=0;
}
moleman.x += moleman.xIncrement;
moleman.y += moleman.yIncrement;
if(moleman.hitTestObject(collect))
{
collectCounter ++;
collect.visible = false;
}
}
你也可以删除第3帧和“gotoAndPlay(2);”调用因为最好将控制英雄位置的代码放入ENTER_FRAME处理程序。