actionscript-3 – AS3 – 将位图包装到Sprite容器中的最佳或推
我正在学习AS3,使用FlashDevelop IDE和Flex进行编译.
我通过创建一个Bitmap类然后在代码中嵌入.png来添加图像,例如: Enemy.as package enemies { import flash.display.Bitmap; import flash.events.MouseEvent [Embed(source="../../assets/gardengnome.png")] public class Enemy extends Bitmap { public function Enemy() { trace("enemy constructed"); } } } 我已经了解到,为了能够处理MouseEvent,我需要将此Bitmap放入Sprite容器中. 现在,不知道这更好,这就是我做的方式: 我创建了一个新变量来在Main.as中保存enemyContainer并将其添加到舞台: package { import enemies.Enemy; import enemies.EnemyContainer; import flash.display.Sprite; import Player.Player; public class Main extends Sprite { public var enemyContainer:EnemyContainer = new EnemyContainer(); public function Main():void { addChild(enemyContainer); } } } 然后EnemyContainer类调用保存图形的Enemy Bitmap并将其作为子项添加到自身: package enemies { import flash.display.Sprite; import flash.events.MouseEvent public class EnemyContainer extends Sprite { private var enemy:Enemy = new Enemy(); public function EnemyContainer() { trace("enemyContainer constructed"); addChild(enemy); addEventListener(MouseEvent.CLICK,handleClick); } private function handleClick(e:MouseEvent):void { trace("Clicked Enemy"); } } } 我还没有足够的经验来看待这样做的任何问题.我可以更改Enemy Bitmap类中的图形而无需处理任何其他内容,Main.as可以处理EnemyContainer的定位. 但是,如果有一种推荐的或更有效的方法来处理这个问题,我想在养成习惯之前先学习它.有一个更好的方法吗? 谢谢你的建议! 解决方法
在您的示例中,您似乎正在创建3个类来实现sprite中的位图:
> Enemy扩展了Bitmap 你的方法是完全有效的,你不会有任何问题.事实上,没有一种最好的方法可以做到这一点.什么是最好的取决于上下文.但是,如果您将Enemy作为EnemyContainer的一部分实现,您可能会发现它更容易管理,因此您只有两个类: >主要 在EmemyContainer中,您为敌人位图创建了一个私有类,如下所示: package enemies { import flash.display.Sprite; import flash.events.MouseEvent public class EnemyContainer extends Sprite { [Embed(source="../../assets/gardengnome.png")] private EnemyBitmap:Class; public function EnemyContainer() { trace("enemyContainer constructed"); addChild(new EnemyBitmap()); // Creates a new instance of your bitmap class. addEventListener(MouseEvent.CLICK,handleClick); } private function handleClick(e:MouseEvent):void { trace("Clicked Enemy"); } } } 您可能还会发现使用Sprite的mouseChildren和buttonMode属性很有帮助,但这取决于您希望鼠标交互的工作方式. ==回复评论== 要在注册中心上定位位图: var temp:Bitmap = new EnemyBitmap() as Bitmap; temp.x = -temp.width/2; temp.y = -temp.height/2; addChild(temp); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |