Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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/flash/4.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 将对象放置在另一个对象的当前位置_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 将对象放置在另一个对象的当前位置

Actionscript 3 将对象放置在另一个对象的当前位置,actionscript-3,flash,Actionscript 3,Flash,我试图在球员的当前位置放置一个物体,但当我离开时,物体会粘在球员身上。我知道为什么它会粘在我的播放器上,但我想不出还有其他代码可以使用 英雄是我在屏幕上移动的玩家 谢谢,洛希 var trap1:trap = new trap(); function keydown(event:KeyboardEvent) :void { if(event.keyCode ==32) addChild(trap1); trap1.x = hero.x; trap1.y =

我试图在球员的当前位置放置一个物体,但当我离开时,物体会粘在球员身上。我知道为什么它会粘在我的播放器上,但我想不出还有其他代码可以使用

英雄是我在屏幕上移动的玩家

谢谢,洛希

var trap1:trap = new trap();

function keydown(event:KeyboardEvent) :void {


    if(event.keyCode ==32)
    addChild(trap1);
    trap1.x = hero.x;
    trap1.y = hero.y;

现在还不清楚你的显示列表是如何组织的,但是试着把陷阱添加为英雄父母的孩子。i、 e:

hero.parent.addChild(trap1);

有几种方法可以完成这项任务。基本上有一个细节你必须知道。在Flash中,显示列表负责管理屏幕上的元素。DisplayObject和DisplayObjectContainer类提供了访问和操作显示列表的API

一个天真的方法是

function placeAbove(d1:DisplayObject, d2:DisplayObject):void
{
  if (!d1 || !d2) return;

  d1.x = d2.x;
  d1.y = d2.y;
}
但是当两个显示对象都有不同的父对象时,显示对象不是同一坐标系的一部分,所以这个小方法不起作用。我编写了一个小示例:

包装 {

应用程序生成2个正方形并将其添加到不同的父对象中。容器父对象随机放置在屏幕上,两个子显示对象也是如此。PlaceUpper方法发挥了所有的魔力。它全局计算第二个显示对象的位置,并将其映射到第一个显示对象的目标局部位置在父对象的坐标系中


我希望能有帮助。

对不起,我忘了提我是新手。我试过你放的东西,但没用。谢谢。我刚做了,效果很好。var-trap1:trap1:trap=new-trap;var-position=hero.x&&hero.y;ifevent.keyCode==32 addChildtrap1;trap1.x=position;trap1.y=position;我无法回答我的问题,所以如果你发了帽子,我会在回答时检查它。我不确定您想做什么,但当您执行var position=hero.x&&hero.y;时,您只是将position设置为1。它可能在您的特定情况下工作,但在其他情况下会中断。可能是因为每次按键盘时,对象的坐标都会重新分配给hero coord使不起作用。
  import flash.display.DisplayObject;
  import flash.display.DisplayObjectContainer;
  import flash.display.Sprite;
  import flash.geom.Point;

  public class Points extends Sprite
  {
    public function Points()
    {
      const child1:Sprite = createSquare(50, 50, 0xFF0000, .5)
          , child2:Sprite = createSquare(100, 100, 0x0000FF, .5)
          , container1:Sprite = new Sprite()
          , container2:Sprite = new Sprite();

      DisplayObjectContainer(placeRandomly(addChild(container1))).addChild(child1);
      DisplayObjectContainer(placeRandomly(addChild(container2))).addChild(child2);

      placeAbove(child1, child2);
    }

    private function createSquare(width:Number, height:Number, color:uint = 0, alpha:Number = 1):Sprite
    {
      const sprite:Sprite = new Sprite();
      sprite.graphics.beginFill(color, alpha);
      sprite.graphics.drawRect(0, 0, width, height);
      sprite.graphics.endFill();

      return sprite;
    }

    private function placeAbove(child1:Sprite, child2:Sprite):void
    {
      const point:Point = child2.localToGlobal(new Point(0, 0))
              , point2:Point = child1.globalToLocal(point);

      child1.x = point2.x;
      child1.y = point2.y;
    }

    private function placeRandomly(displayObject:DisplayObject):DisplayObject
    {
      displayObject.x = Math.random() * 100;
      displayObject.y = Math.random() * 100;

      return displayObject;
    }
  }
}