CS6 - Actionscript 3.0碰撞,点和没有碰撞

时间:2013-03-19 05:45:29

标签: actionscript-3 2d collision

我一直用闪光灯玩弄了一下,我通常很快就解决了我的问题,但是我已经被困在这个问题上几天了,谷歌没有用,我也没有朋友知道很多关于闪光。

所以,我一直致力于制作一个基本的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,并手动使墙的每个部分不同......但我不认为这是有效或合理的。
感谢您的帮助。

1 个答案:

答案 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的边界或的边界。