加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – AS3 – 将位图包装到Sprite容器中的最佳或推

发布时间:2020-12-15 01:45:19 所属栏目:百科 来源:网络整理
导读:我正在学习AS3,使用FlashDevelop IDE和Flex进行编译. 我通过创建一个Bitmap类然后在代码中嵌入.png来添加图像,例如: Enemy.as package enemies {import flash.display.Bitmap;import flash.events.MouseEvent[Embed(source="../../assets/gardengnome.png")
我正在学习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
> EnemyContainer扩展了Sprite
> Main扩展Sprite

你的方法是完全有效的,你不会有任何问题.事实上,没有一种最好的方法可以做到这一点.什么是最好的取决于上下文.但是,如果您将Enemy作为EnemyContainer的一部分实现,您可能会发现它更容易管理,因此您只有两个类:

>主要
> 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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读