我一直用闪光灯玩弄了一下,我通常很快就解决了我的问题,但是我已经被困在这个问题上几天了,谷歌没有用,我也没有朋友知道很多关于闪光。
所以,我一直致力于制作一个基本的2D平台。我在弄清楚如何在角色和bg.hitTestPoint上实现点时遇到了问题。就目前而言,在我处理积分和所有内容之前,它工作得很好。我有一个痕迹,当它认为它与物体发生碰撞时告诉我(在这种情况下是一堵墙)。
角色的尺寸是:
顶尖中心:(42,0)
机器人中心:(42,112)
R.中心:(84,56)
L.中心:(0,56)
总图像:84 x 112(px)
角色在屏幕上的位置:
顶尖中心:(46,460)
Bot中心:(46,379)
L.中心:(20,440)
R.中心:(80,420)
以下是块:
碰撞/碰撞变量:
var leftB:Boolean = false;
var rightB:Boolean = false;
var topB:Boolean = false;
var botB:Boolean = false;
var topBPt:Point = new Point(42, 0);
var botBPt:Point = new Point(42, 112);
var leftBPt:Point = new Point(0, 56);
var rightBPt:Point = new Point(84, 56);
hitTestPoint块:(为了节省空间,我只做最上面的一个。)
if(bg.hitTestPoint(fag.x + topBPt.x, fag.y + topBPt.y, true))
{
trace("Top Bump works.");
topB = true;
}
else
{
topB = false;
}
if(bg.hitTestPoint(fag.x + topBPt.x, fag.y + topBPt.y, true))
{
trace("Top Bump works.");
topB = true;
}
else
{
topB = false;
}
{{1 }}
我尝试使用不同的尺寸,我可能只是没有理解我正在阅读的网站上的完整解释。
另外,我有一种感觉,我可以解决它只是使它成为一个hitTestObject,并手动使墙的每个部分不同......但我不认为这是有效或合理的。
感谢您的帮助。
答案 0 :(得分:0)
找出矩形区域碰撞的数学计算通常是相同的。
首先看一下代码之后,将屏幕对象定义为对象...我的意思是子类Sprite类并为其添加属性,不要通过全局变量来实现...
像:
public class myScreenObjs extends Sprite {
// Add the tricky cool specialities and properties here
}
通常,精灵会公开其x和y坐标。如果动态创建的x和y位于精灵的左上角,如果通过cs6,你最好从中心到左上角采用o,以便有一个共同的参考地。当需要旋转时,居中的x y参考适用于3d。
精灵也有宽度和高度属性。
让我们假设你有精灵c(字符)和b(阻止碰撞)
假设:
左边是对象的左边。
右边是对象的右边x。
top是对象的顶部y。
底部是一个物体的底部。
我知道这不是一个非常理想的功能,但我是为了演示而写的。
function bumpTest(c: Sprite, b: Sprite):Object {
var
r: * = {},
cLeft : int = c.x, // doing this for demonstrating you can directly use c.x
cRight : int = c.x + c.width,
cTop : int = c.y, // same
cBottom : int = c.y + c.height,
bLeft : int = b.x, // same
bRight : int = b.x + b.width,
bTop : int = b.y, // same
bBottom : int = b.y + b.height;
r.left = Boolean ((cLeft >= bLeft) && (cLeft <= bRight));
r.right = Boolean ((cRight >= bLeft) && (cRight <= bRight));
r.top = Boolean ((cTop >= bTop) && (cTop <= bBottom));
r.bottom = Boolean ((cBottom >= bTop) && (cBottom <= bBottom));
r.bump = Boolean ((r.left || r.right)&&(r.top || r.bottom));
return(r);
}
现在r有完整的答案,如果r.bump为假,则r中的其他值无关紧要。 如果r.bump变为真,那么你可以通过r.left等检查c从哪里碰到b。因为:
r.left true表示c left进入b的边界或的边界。
r.right true表示c right进入b的边界或在b的边界处。
r.top true表示c top进入b的边界或的边界。
r.bottom true表示c bottom位于b的边界或的边界。