我正在尝试将一个物体放在我的玩家当前位置,但当我移开时,该物体会粘在我的玩家身上。我知道为什么它坚持我的播放器,但我想不出任何其他代码可以使用。
Hero是我在屏幕上移动的玩家。
感谢Lochy
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 :(得分:0)
目前还不是很清楚你的显示列表是如何组织的,但是尝试将陷阱添加为英雄父母的孩子。即:
hero.parent.addChild(trap1);
答案 1 :(得分: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具有不同的父对象时,DisplayObjects不属于相同的坐标系,因此这个小方法不起作用。我编写了一个小例子:
包 {
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方法完成所有魔术。它全局计算第二个显示对象的位置,并将其映射到第一个显示对象的目标位于父坐标系内的本地位置。
我希望它有所帮助。