首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将一个精灵的位置粘贴到另一个精灵上?

如何将一个精灵的位置粘贴到另一个精灵上?
EN

Stack Overflow用户
提问于 2009-09-15 15:15:19
回答 2查看 404关注 0票数 0

我有以下代码:

代码语言:javascript
运行
复制
if (i==0)
  sprites[i].y = 0;
else
  sprites[i].y = sprites[i-1].y + sprites[i-1].height; 

每个Sprite可以有不同的高度。Sprite的高度可以根据用户的操作进行更改。

当一些精灵的高度发生变化时,我想相应地更新其他精灵的位置。

我正在寻找一个面向对象(也许是事件驱动)的解决方案。有什么想法吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-16 20:21:43

如果你能很好地控制任何给定sprite的高度何时会改变,那么你可以使用一个自定义事件。设置将如下所示:

代码语言:javascript
运行
复制
var UPDATED_EVENT:String = "updated";
var i:int = 0;
var count:int = sprites.length; // this is the length of your array

for (i = 0; i < count; i++) {
  sprites[i].addEventListener(UPDATED_EVENT, calc);
}

function calc(e:Event = null):void {
// here goes your positioning code
  for (i = 0; i < count; i++) {
    if (i==0)
      sprites[i].y = 0;
    else
      sprites[i].y = sprites[i-1].y + sprites[i-1].height;
  }
}

calc();

然后,只要确保每当你改变你的一个精灵的高度时,你可以这样做:

代码语言:javascript
运行
复制
mySprite.dispatchEvent(new Event(UPDATED_EVENT));

如果您分布在多个类中(您可能应该这样做),那么您可以将UPDATED_EVENT字符串作为单独事件类中的常量,并从这两个类中访问它。

这对你来说仍然不是一个完美的解决方案-如果你愿意,你可以找出哪个sprite改变了它的高度,并且只重新计算它后面的sprite,这将使你的代码更有效率-但它胜过每次调用enterframe事件。

现在,如果你正在使用Flex,你会有更多的工具可供你使用-你可能会使用数据绑定来自动化几乎所有的这些,或者至少使用changed事件来自动为你分派事件,但这是无关紧要的!

票数 1
EN

Stack Overflow用户

发布于 2009-09-15 18:01:49

无法完全跟踪DisplayObjectxywidthheight属性的更改...您可以重写访问器,但这仍然不能很好地工作...例如,一个对象可能会变得更大,因为添加了一个子对象,绘制了一些东西,完成了一些加载操作等等。

如果精灵的数量相当低(<200),你可以很容易地在enterframe上进行检查,而不会造成任何可测量的性能损失……不,这不是一个很好的方法,但它确实是最有效和最安全的做法……

祝你好运... ;)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1427816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档