【问题标题】:How do I change the hitbox of a movie clip in actionscript 3 to not use the bounding box?如何更改动作脚本 3 中影片剪辑的命中框以不使用边界框?
【发布时间】:2014-02-12 23:32:19
【问题描述】:

我们有一个对象 (mc_robert) 与另一个对象 (mc_left) 发生碰撞。当碰撞发生时,我们有一个动作发生。我们要弄清楚的是如何改变物体的碰撞盒(mc_robert),以便在检测到碰撞时物体重叠。我们不想要对象的默认碰撞框(mc_robert)。任何可以提供的帮助将不胜感激。

这是我们目前的代码:

var numX:Number = 0;
var numY:Number = -2;

addEventListener(Event.ENTER_FRAME,loop);
function loop(e:Event)
  {
  mc_robert.y += numY;
  mc_robert.x += numX;
  if (mc_robert.hitTestObject(mc_left))
    {
    numX = -2;
    numY = 0;
    mc_robert.rotation = -90;
    }
  }

【问题讨论】:

    标签: actionscript-3 flash collision-detection collision


    【解决方案1】:

    对于像素完美碰撞,将形状转换为 BitmapData 并使用 BitmapData 的 Hit-test 方法。

    如果您不想执行上述方法,您可以使用 hitTestPoint 并在 for 循环中创建多个点来进行碰撞。

    例如:尚未测试以下代码,但概念就在那里。这将创建一个边界框,或者您可以使用一些三角函数从圆碰撞或自定义创建点。

    for(var y:int = 0;y<2;y++){
         for(var x:int=0;x<2;x++){
            var w:int = mc2.width*x;
            var h:int = mc2.height*y;
            if(mc1.hitTestPoint(mc2.x+w, mc2.y+h, true)){
               trace("collides");
            }
         }
    }
    

    为了获得最佳精度,我使用的解决方案是 BitmapData 冲突。

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多