Actionscript 3 Starling library-当我尝试将光标更改为图像时,它不会';t工作(一个精灵元素从舞台上消失)

Actionscript 3 Starling library-当我尝试将光标更改为图像时,它不会';t工作(一个精灵元素从舞台上消失),actionscript-3,flash,cursor,sprite,starling-framework,Actionscript 3,Flash,Cursor,Sprite,Starling Framework,我用它来制作一个非常非常简单的游戏-我只是想在舞台上添加一个固定的精灵…当鼠标碰到精灵时…游戏“停止”并发送分数。我还没有尝试为冲突实现hitTest,但我遇到了一种冲突问题,当我注释掉应该更改光标图像的行时(请参见Startup.as-stage.addEventListener(TouchEvent.TOUCH,touchHandler);和createCustomUrsor),AvatarEnemy的实例(参见游戏中的敌人)执行它应该执行的操作,并放置在屏幕中央。当我在应该更改光标的行中添

我用它来制作一个非常非常简单的游戏-我只是想在舞台上添加一个固定的精灵…当鼠标碰到精灵时…游戏“停止”并发送分数。我还没有尝试为冲突实现
hitTest
,但我遇到了一种冲突问题,当我注释掉应该更改光标图像的行时(请参见
Startup.as
-
stage.addEventListener(TouchEvent.TOUCH,touchHandler);
createCustomUrsor
),AvatarEnemy的实例(参见游戏中的
敌人
)执行它应该执行的操作,并放置在屏幕中央。当我在应该更改光标的行中添加注释时:a)。光标不变,b.)敌人的精灵消失。当我注释出相同的行时,
敌人
精灵再次出现(但很明显,光标不起作用-并不是说它一开始就起作用)。为什么会这样?下面是我的代码——有人提到在Starling初始化之前不做任何事情(我问了一个问题,这是这个问题的前奏)——但我不确定它们的意思,因为至少我的所有代码似乎都在正确的位置

游戏。如

package
{

import Classes.AvatarEnemy;

import starling.display.Sprite;

    public class Game extends Sprite
    {
        //private var juggler:Juggler = Starling.juggler;

        private var enemy:AvatarEnemy;

        public function Game() 
        {   
            enemy = new AvatarEnemy();
            addChild(enemy);
        }
    }
}
package 
{
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.geom.Point;

    import starling.core.Starling;
    import starling.events.Touch;
    import starling.events.TouchEvent;
    import starling.display.DisplayObject;
    import flash.display.BitmapData;
    import flash.ui.MouseCursorData;
    import flash.ui.Mouse;

    [SWF(width="500", height="500", frameRate="30", backgroundColor="#FFFFFF")]
    public class Startup extends Sprite
    {
        private var mStarling:Starling;

        [Embed(source="Classes/Avatarpic.png")]
        private const Cursor:Class;

        public var cursor:DisplayObject;

        public function Startup()
        {
            // Create a Starling instance that will run the "Game" class
            mStarling = new Starling(Game, stage);
            mStarling.start();

            // These settings are recommended to avoid problems with touch handling
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            createCustomCursor();
            stage.addEventListener(TouchEvent.TOUCH, touchHandler);
        }

        private function touchHandler(event:TouchEvent):void
        {
            var touch:Touch = event.getTouch(cursor);
            if(touch.phase){
                {
                    var localPos:Point = touch.getLocation(cursor);
                    trace("Touched object at position: " + localPos);
                }
            }
        }

        public function createCustomCursor():void
        {
            var cursorBitmaps:Vector.<BitmapData> = new Vector.<BitmapData>();
            cursorBitmaps.push((new Cursor() as Bitmap).bitmapData);

            var mouseCursorData:MouseCursorData = new MouseCursorData();
            mouseCursorData.data        = cursorBitmaps;
            mouseCursorData.frameRate   = 30;
            mouseCursorData.hotSpot     = new Point(0, 0);

            Mouse.registerCursor("customCursor", mouseCursorData);
            Mouse.cursor = "customCursor";
        }
    }
}
package Classes
{   
    import starling.display.Image;
    import starling.display.Sprite;
    import starling.textures.Texture;

    public class AvatarEnemy extends Sprite
    {
        [Embed(source='Enemypic.png')]
        private static var Enemypic:Class;

        private var texture:Texture = Texture.fromBitmap(new Enemypic());

        private var image:Image = new Image(texture);

        public function AvatarEnemy() 
        {               
            image.x = 0;
            image.y = 200;

            addChild(image);            
        }
    }
}
启动。作为

package
{

import Classes.AvatarEnemy;

import starling.display.Sprite;

    public class Game extends Sprite
    {
        //private var juggler:Juggler = Starling.juggler;

        private var enemy:AvatarEnemy;

        public function Game() 
        {   
            enemy = new AvatarEnemy();
            addChild(enemy);
        }
    }
}
package 
{
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.geom.Point;

    import starling.core.Starling;
    import starling.events.Touch;
    import starling.events.TouchEvent;
    import starling.display.DisplayObject;
    import flash.display.BitmapData;
    import flash.ui.MouseCursorData;
    import flash.ui.Mouse;

    [SWF(width="500", height="500", frameRate="30", backgroundColor="#FFFFFF")]
    public class Startup extends Sprite
    {
        private var mStarling:Starling;

        [Embed(source="Classes/Avatarpic.png")]
        private const Cursor:Class;

        public var cursor:DisplayObject;

        public function Startup()
        {
            // Create a Starling instance that will run the "Game" class
            mStarling = new Starling(Game, stage);
            mStarling.start();

            // These settings are recommended to avoid problems with touch handling
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            createCustomCursor();
            stage.addEventListener(TouchEvent.TOUCH, touchHandler);
        }

        private function touchHandler(event:TouchEvent):void
        {
            var touch:Touch = event.getTouch(cursor);
            if(touch.phase){
                {
                    var localPos:Point = touch.getLocation(cursor);
                    trace("Touched object at position: " + localPos);
                }
            }
        }

        public function createCustomCursor():void
        {
            var cursorBitmaps:Vector.<BitmapData> = new Vector.<BitmapData>();
            cursorBitmaps.push((new Cursor() as Bitmap).bitmapData);

            var mouseCursorData:MouseCursorData = new MouseCursorData();
            mouseCursorData.data        = cursorBitmaps;
            mouseCursorData.frameRate   = 30;
            mouseCursorData.hotSpot     = new Point(0, 0);

            Mouse.registerCursor("customCursor", mouseCursorData);
            Mouse.cursor = "customCursor";
        }
    }
}
package Classes
{   
    import starling.display.Image;
    import starling.display.Sprite;
    import starling.textures.Texture;

    public class AvatarEnemy extends Sprite
    {
        [Embed(source='Enemypic.png')]
        private static var Enemypic:Class;

        private var texture:Texture = Texture.fromBitmap(new Enemypic());

        private var image:Image = new Image(texture);

        public function AvatarEnemy() 
        {               
            image.x = 0;
            image.y = 200;

            addChild(image);            
        }
    }
}
更新


我解决了精灵消失的原因-我需要把椋鸟初始化代码(
mStarling.start()
mStarling=new starling(游戏,舞台);
)放在所有
舞台的上面。我编辑代码以反映我在
Startup.as
中所做的操作。不过,我仍然需要有关光标的帮助。

我一直在练习您的代码,看起来一切都很好,但我一直在使用不同的图像,所以这一定是问题所在


确保图像的大小小于32x32,这是光标图像的最大大小,否则操作系统将不接受它。

另外-从photoshop导出-保存为web-我从flash cc导出图像,这可能是问题所在