Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 CS6-Actionscript 3.0碰撞、点和缺少凹凸_Actionscript 3_2d_Collision - Fatal编程技术网

Actionscript 3 CS6-Actionscript 3.0碰撞、点和缺少凹凸

Actionscript 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) 总图

我一直在玩弄flash,我通常会很快解决我的问题,但是我已经在这个问题上坚持了几天,谷歌没有什么用处,我也没有很多朋友知道flash

所以,我一直在做一个基本的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);
}