2012-04-20 89 views
0

我试图将一个物体在我的球员现在的位置,但是当我搬走的对象粘到我的播放器。我知道为什么它坚持我的球员,但我不能想到任何其他代码使用。放置一个对象在另一个对象的当前位置

英雄是我的球员,我在屏幕上移动。

感谢洛希

var trap1:trap = new trap(); 

function keydown(event:KeyboardEvent) :void { 


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

也许是因为你每次按下对象的坐标被重新分配到英雄坐标键盘。 – 2012-04-20 12:03:26

回答

0

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

一个天真的做法是

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

    d1.x = d2.x; 
    d1.y = d2.y; 
} 

但是当两者的DisplayObject有不同父母的DisplayObject不忒同一坐标系统的一部分,所以这个小方法是行不通的。余编码一个小例子:

包 {

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; 
    } 
    } 
} 

中的应用产生2个平方,并将其添加到不同的父母。容器(父母)随机放置在屏幕上,两个子显示对象也是如此。 placeAbove方法完成所有的魔术。它从全局第二个显示对象计算位置,并将其映射到父级坐标系内的第一个显示对象。

㈡希望它帮助。

0

这不是很清楚的显示列表是如何组织的,但尝试添加陷阱为主人公的父母的孩子。即:

hero.parent.addChild(trap1); 
+0

对不起,我忘了提及我是新来的。我尝试了你放入的东西,但它不起作用。不过谢谢。 – LochyMacleod 2012-04-20 08:42:57

+0

我只是这样做,它的工作。 VAR TRAP1:陷阱=新的陷阱(); var position = hero.x && hero.y; 如果(event.keyCode == 32) 的addChild(TRAP1); \t \t trap1.x = position; \t trap1.y = position; – LochyMacleod 2012-04-20 08:57:09

+0

我不能回答我的问题,所以如果你发布,我会检查它的答案。 – LochyMacleod 2012-04-20 09:04:51

相关问题