1

我是新来的,需要一点帮助。基本上我正在设计一个类似吃豆人的游戏,它必须基于柳树中的风,所以它是鼹鼠人!

无论如何,我已经完成了它的基础,我已经制作了我的 2d 痣,让他移动,让他对按钮按下等做出反应,现在试图让墙壁工作,从外墙开始。

我在边缘周围制作了 4 个矩形,将它们合并为一个形状,并将其称为“外墙”。我一直在使用 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 但所有其他保持可见。目前,如果您收集一个“收集”物品,moleman 会停下来并留在原地,而另一个moleman 会出现并继续,这不是很有用。对此的任何帮助也将不胜感激,不知道从那里得到它。

非常感谢任何帮助,我是新来的,但希望它能顺利进行:)

非常感谢所有帮助。约翰。

4

1 回答 1

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 处理程序。

于 2012-12-06T00:34:22.240 回答