动作脚本 3,Flash 开发。错误我不知道如何解决

Action Script 3, Flash Develop. Error I don't know how to resolve


我得到的错误是:

F:\Game Techniques\FireBoy&WaterGirl\src\Hero.as(11): col: 3: Error:
An Embed variable must not have an existing value.

[Embed(source="../assets/FireBoy.jpg")]

请您解释一下这是什么意思以及我是如何解决的。

这是完整的代码

package  
{
    import flash.display.Bitmap;
    import flash.display.Sprite;

    /**
     * ...
     * @author Harry
     */
    public class Hero extends Sprite
    {
        [Embed(source="../assets/FireBoy.jpg")]

        public var grav:int = 0;
        public var floor:int = 580;

        private static const HeroFireBoy:Class;
        private var FireBoy:Bitmap;

        public function Hero() 
        {
            FireBoy = new Hero.HeroFireBoy();
            scaleX = 0.1;
            scaleY = 0.1;

            addChild(FireBoy);
        }
        public function adjust():void 
        {
            FireBoy.y += grav;
            if(FireBoy.y+FireBoy.height/2<floor)
                grav++;
            else 
            {
                grav = 0;
                FireBoy.y = floor - FireBoy.height / 2;
            }
            if (FireBoy.x - FireBoy.width / 2 < 0)
                FireBoy.x = FireBoy.width / 2;
            if (FireBoy.x + FireBoy.width / 2 > 800)
                FireBoy.x = 800 - FireBoy.width / 2;
        }

    }

}

如果您在以下行之后可能会发生:

[Embed(source="../assets/FireBoy.jpg")]

用值声明一些变量。 例如:

[Embed(source="../assets/FireBoy.jpg")] private var fireBoyClass:Class = null;

一般来说,在[Embed(source="../assets/FireBoy.jpg")]之后,下一行应该是与嵌入源关联的变量声明。

public class SomeClass 
{
    [Embed(source = "../assets/FireBoy.jpg")]
    private var fireBoyClass:Class;

在您的情况下,只需将 private static const HeroFireBoy:Class; 行移至下方 [Embed(source = "../assets/FireBoy.jpg")]

最后看起来像:

public class Hero extends Sprite
{
    [Embed(source = "../assets/FireBoy.jpg")]
    private static const HeroFireBoy:Class;

    public var grav:int = 0;
    public var floor:int = 580;

提供更多关于@Kir 的回答的信息;当你嵌入某些东西时,你需要将它与类型 Class 的变量相关联,以便你以后可以创建它。这是通过以下方式完成的:

[Embed(source = "../assets/FireBoy.jpg")]
private var fireBoyClass:Class;

因为在您的示例中,带有 fireBoyClass 的行不存在,Flash 认为您正试图将它与行

相关联
public var grav:int = 0;

你的错误是什么。

声明 Class 属性 后,您就可以创建嵌入数据的实例:

public var fireBoyBitmap:Bitmap = ( new fireBoyClass ) as Bitmap;

这个 post (http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf60546-7ff2.html) 很好地概述了 [Embed] 元标记 - 只需专注于 <fx:Script> 之间的代码并忽略 [Bindable] metatag - 这只对 flex 有用。