我正在使用 FlashDevelop
学习 AS3 IDE 和 Flex
编译。
我通过创建 Bitmap
添加图像类,然后在代码中嵌入一个 .png,例如:
敌人
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
容器。现在,我不知道这是我的做法:
我创建了一个新变量来保存
enemyContainer
在 Main.as
并将其添加到舞台: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
保存图形并将其作为 child 添加到自身: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 实现为 EnemyContainer 的一部分,您可能会发现管理起来更容易,这样您就只有两个类:
在 EmemyContainer 中,您为敌人位图创建了一个私有(private)类,如下所示:
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");
}
}
}
您可能还会发现使用
mouseChildren
很有帮助和 buttonMode
Sprite 的属性,但这取决于您希望鼠标交互如何工作。==回复评论==
将位图定位在注册中心:
var temp:Bitmap = new EnemyBitmap() as Bitmap;
temp.x = -temp.width/2;
temp.y = -temp.height/2;
addChild(temp);
关于actionscript-3 - AS3 - 将位图包装到 Sprite 容器中的最佳或推荐方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16593608/