actionscript-3 - AS3 - 将位图包装到 Sprite 容器中的最佳或推荐方式是什么?

标签 actionscript-3 apache-flex

我正在使用 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容器。

现在,我不知道这是我的做法:

我创建了一个新变量来保存 enemyContainerMain.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 中实现位图:

  • 敌人扩展位图
  • EnemyContainer 扩展 Sprite
  • 主要扩展 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/

    相关文章:

    apache-flex - 在 ActionScript 3 中在形状上绘制文本

    html - 柔性 : Does anyone know a good HTML editor?

    c - 从 C 返回的 ByteArray 格式无效

    xml - 检索子 XML 元素以显示饼图

    actionscript-3 - 如何无缝循环FLV

    apache-flex - Flex FileReference.browse() 打开一个保存对话框——不是一个打开的对话框

    actionscript-3 - 如何退出(关闭)移动 flex 应用程序?

    ios - Heyzap Fyber 集成 Adob​​e Air

    java - 是否可以使用计时器扩展Flex树中的所有节点?

    apache-flex - 以编程方式关闭 AIR 应用程序