所以我在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)。墙也是位图,但它只是一个矩形。
答案 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
将根据碰撞检查结果变为真或假。