Actionscript 3 CS6-Actionscript 3.0碰撞、点和缺少凹凸
我一直在玩弄flash,我通常会很快解决我的问题,但是我已经在这个问题上坚持了几天,谷歌没有什么用处,我也没有很多朋友知道flashActionscript 3 CS6-Actionscript 3.0碰撞、点和缺少凹凸,actionscript-3,2d,collision,Actionscript 3,2d,Collision,我一直在玩弄flash,我通常会很快解决我的问题,但是我已经在这个问题上坚持了几天,谷歌没有什么用处,我也没有很多朋友知道flash 所以,我一直在做一个基本的2D平台。我在弄清楚如何在角色和bg.hitTestPoint上实现这些点时遇到了问题。就目前情况而言,在我处理要点和所有问题之前,它工作得很好。我在中有一个跟踪,让我知道它何时认为它与对象(在本例中为墙)发生碰撞。 角色的尺寸为: 上止点:(42,0) Bot中心:(42112) R.中心:(84,56) L.中心:(0,56) 总图
所以,我一直在做一个基本的2D平台。我在弄清楚如何在角色和bg.hitTestPoint上实现这些点时遇到了问题。就目前情况而言,在我处理要点和所有问题之前,它工作得很好。我在中有一个跟踪,让我知道它何时认为它与对象(在本例中为墙)发生碰撞。
角色的尺寸为:
上止点:(42,0)
Bot中心:(42112)
R.中心:(84,56)
L.中心:(0,56)
总图像:84 x 112(像素)
角色在屏幕上的位置:
上中:(46460)
Bot中心:(46379)
L.中心:(20440)
R.中心:(80420)
以下是模块:
碰撞/碰撞变量:
var leftB:Boolean=false
var rightB:Boolean=false
var-topB:Boolean=false
var botB:Boolean=false;
var topBPt:点=新点(42,0)
var botBPt:点=新点(42112)
var leftBPt:点=新点(0,56)
var rightBPt:点=新点(84,56)
hitTestPoint块:(为了节省空间,我只做上面的一个。)
if(topB)
{
if(ySpeed < 0)
{
ySpeed *= -0.5;
}
}
if(topB)
{
如果(Y速度<0)
{
Y速度*=-0.5;
}
}
我尝试使用不同的维度,很可能我没有理解我正在阅读的网站上的完整解释。
此外,我觉得我可以通过将其设置为hitTestObject,并手动将墙的每个部分设置为不同的方式来解决此问题……但我认为这并不是有效或合理的
谢谢您的帮助。计算矩形区域碰撞的数学方法大体相同 首先,在浏览代码之后,将屏幕对象定义为对象。。。我的意思是子类Sprite类并向其添加属性,而不是通过全局 比如: 通常,精灵会显示其x和y坐标。如果动态创建的x和y位于精灵的左上角,如果通过cs6,您最好从中心到左上角取带有十字的o,以便有一个共同的参考基础。居中的x y参照适用于3d,特别是在需要旋转时 精灵还具有宽度和高度属性 假设您有精灵c(角色)和b(块到凹凸) 鉴于: left是对象的左x 右是对象的右x 顶部是对象的顶部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);
}
函数测试(c:Sprite,b:Sprite):对象{
变量
r:*={},
cLeft:int=c.x,//这样做是为了演示您可以直接使用c.x
cRight:int=c.x+c.width,
cTop:int=c.y,//相同
cBottom:int=c.y+c.height,
bLeft:int=b.x,//相同
亮度:int=b.x+b.width,
bTop:int=b.y,//相同
bBottom:int=b.y+b.height;
r、 左=布尔((谱号>=bLeft)和&(谱号=bLeft)和&(cRight=bTop)和&(cTop=bTop)和(cBottom虽然这个响应没有解决我手头的问题,但我学到了更多,这本身就很好。我将尝试更好地详细说明这个问题。要解决您的问题,您必须将上面的代码构建成一个函数,将b和c传递给它,并映射坐标。例如,您可以使用var cL:int=c.leftCenter.x来代替c.left;等等……对不起,我不知道您在对象中使用的确切属性名称和结构。我附上了代码,以防您想查看。那么,它是这样的吗?[code]var playerLeft:Point=new Point(0,56);var playerRight:Point=new Point(84,56);[/code]事实上,我以前是这样编码的,只是用了一些蹩脚的名字。也许我的问题只是坐标…?@DouglasHarding现在试一试。这是我的整个代码。[至少是详细的,对吗?[(如果这对任何人来说都是一个麻烦,我很抱歉)这是目前实际的程序:(问题的物理示例)[snipt.org给出404错误。顺便说一句,英雄像《黑客帝国》中的双胞胎一样穿越了所有障碍……酷我相信我修复了链接。至少很酷。snipt.org/zhaG4/Default
public class myScreenObjs extends Sprite {
// Add the tricky cool specialities and properties here
}
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);
}