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导出图像,这可能是问题所在