0

玩弄flash有一段时间了,我的问题一般都能很快解决,但是我在这个上卡了几天,google一直没用,也没有朋友对flash很了解.

所以,我一直致力于制作一个基本的 2D 平台。我在弄清楚如何在角色和 bg.hitTestPoint 上实现点时遇到问题。就目前而言,在我处理要点和所有内容之前,它运行良好。我有一个踪迹,让我知道它何时认为它与物体(在这种情况下是一堵墙)发生碰撞。


角色的尺寸为:
顶部中心:(42,0)
机器人中心:(42,112) 右侧中心:(84,56) 左侧
中心:(0,56
)
总图像:84 x 112 (px)

角色在屏幕上的位置:
顶部中心:(46, 460)
机器人中心:(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(topB)
{
    if(ySpeed < 0)
    {
        ySpeed *= -0.5;
    }
}



我尝试使用不同的维度,我可能只是没有理解我正在阅读的网站上的完整解释。

另外,我有一种感觉,我可以通过将其设置为 hitTestObject 并手动使墙的每个部分不同来解决它......但我认为这不是有效或合理的。
谢谢你的帮助。

4

1 回答 1

0

找出矩形区域碰撞的数学通常是相同的。

首先,在浏览您的代码之后,将您的屏幕对象定义为对象......我的意思是 sublass Sprite 类并向其添加属性,不要通过全局来执行......

像:

public class myScreenObjs extends Sprite {
      // Add the tricky cool specialities and properties here
} 

通常一个精灵会暴露它的 x 和 y 坐标。如果动态创建的 x 和 y 位于 sprite 的左上角,如果通过 cs6 最好将 o 与从中心到左上角的十字交叉,以获得共同的参考点。居中的 xy 参考非常适合 3d,特别是在需要旋转时。

精灵也有宽度和高度属性。

让我们假设你有精灵 c(字符)和 b(块到凹凸)

鉴于:

left 是对象的左 x。

right 是对象的右 x。

top 是对象的顶部 y。

底部是对象的底部 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 的权利在 b 的内部或边界处。

r.top true 表示 c top 在 b 的内部或边界处。

r.bottom true 意味着 c 底部在 b 的内部或边界处。

于 2013-03-19T08:34:03.183 回答