由于位图,碰撞搞砸了

时间:2015-11-18 22:10:46

标签: image actionscript-3 collision-detection

所以我在AS3中创建了一个伪3D碰撞系统(就是你所说的那个?)(早期版本显示在here之外),我正在使用一个简单的圆形精灵,现在我已经改为做我自己的角色形象

[Embed(source = 'Library/MChar.png')] private var MCharacter:Class;

然后为角色

创建一个变量
public var Character = new MCharacter();

但由于这个东西不再是一个圆圈,我完全不知道怎么做碰撞(除了一些基本的box2d东西以外从未对AS3做过任何事情)

碰撞代码:

    for each (var wall in Walls)
    {
        if (wall.hitTestPoint(Character.x - hitRad+1, Character.y, true)) //col right
        {
            Character.x+=CharacterSpeed;
        }
        if (wall.hitTestPoint(Character.x + hitRad-1, Character.y, true)) //col left
        {
            Character.x-=CharacterSpeed;
        }
        if (wall.hitTestPoint(Character.x , Character.y - hitRad, true)) //col bottom
        {
            Character.y+=CharacterSpeed;
        }
        if (wall.hitTestPoint(Character.x, Character.y+hitRad-30, true)) //col top
        {
            Character.y -= CharacterSpeed;
        }
        if (wall.hitTestPoint(Character.x, Character.y+hitRad-0.01, true))  // col top #2
        {
            Top = true;
        }
        if (wall.hitTestPoint(Character.x - hitRad, Character.y, true) || wall.hitTestPoint(Character.x + hitRad, Character.y, true) || wall.hitTestPoint(Character.x , Character.y - hitRad-1, true))
        {
            Top = false;
        }
    }
抱歉,如果你不明白。我不知道如何解释它,正如我之前提到的,我是AS3的新手(目前只知道lua和python)。墙也是位图,但它只是一个矩形。

1 个答案:

答案 0 :(得分:0)

试试这些链接:

<强> tut 1: Transparent PNG images

<强> tut 2 : HitTest Guide

首先..尝试以下代码:http://snipplr.com/view.php?codeview&id=90435

function ObjectsHit (mc1, mc2) : Boolean //returns a true or false as result
{
    var mc1bounds = mc1.getBounds(this);
    var mc2bounds = mc2.getBounds(this);
    var allintersections = (mc2bounds.intersection(mc1bounds)); 
    for (var xval:Number = allintersections.x; xval < allintersections.x + allintersections.width; xval ++ ) 
    {
        for (var yval:Number = allintersections.y; yval < allintersections.y + allintersections.height;yval ++ ) 
        {
            if (mc2.hitTestPoint(xval, yval, true) && mc1.hitTestPoint(xval, yval, true)) 
            {
                return(true);
            }
        }
    }

    return(false);
} 

每当您想要运行该函数来测试两个对象是否正在触摸时,只需在代码中添加如下所示的行:

Top = ObjectsHit (mc1, mc2);其中mc1和mc2是测试对象的实例名称。 Top将根据碰撞检查结果变为真或假。