我在用Starling http://gamua.com/starling/制作一个非常非常简单的游戏 - 我只是想在舞台上添加一个固定的精灵......并使其在鼠标触摸精灵时......游戏“停止”并发送分数。我没有尝试过实施hitTest
尚未发生碰撞,但我遇到了一种冲突问题,当我注释掉应该更改光标图像的行时(请参阅Startup.as
- stage.addEventListener(TouchEvent.TOUCH, touchHandler);
and createCustomeCursor
),AvatarEnemy 的实例(参见enemy
在 Game.as 中)执行其应该执行的操作,并将其放置在屏幕中央。当我在应该更改光标的行中进行评论时:a)。光标不会改变,并且 b.)enemy
精灵消失。当我注释掉相同的行时 -enemy
精灵再次出现(但显然,光标不起作用 - 并不是它一开始就起作用)。为什么会发生这种情况?我的代码如下 - 有人提到了在 Starling 初始化之前不做任何事情here https://stackoverflow.com/questions/23772083/starling-library-sprite-dissapeared-from-stage-and-i-dont-know-why?noredirect=1#comment36562854_23772083(我问的一个问题,这是这个问题的前身) - 但我不确定他们的意思,因为至少看起来我的所有代码都在正确的位置。
Game.as
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";
}
}
}
任何帮助将不胜感激(如果您需要代码的副本(这是一个 Adobe Flash Builder 4.7 项目 - 我已经制作了一个 git 存储库 - 如果您想要链接,请发表评论)。
UPDATE
我意识到我没有将图像注册为光标 - 我更新了我的Startup.as
文件来反映更改(看看createCustomCursor
函数) - 光标仍然不起作用,并且应该出现的精灵仍然没有出现。
另外 - 以防万一你想看看哪里AvatarEnemy
来自:
阿凡达敌人
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);
}
}
}
UPDATE
我解决了精灵消失的原因 - 我需要放置八哥初始化代码(mStarling.start()
and mStarling = new Starling(Game, stage);
)首先是stage.something
线。我编辑了代码以反映我在中所做的事情Startup.as
。不过我仍然需要光标方面的帮助。