Starling 库 - 当我尝试将光标更改为图像时...它不起作用(并且精灵元素从舞台上消失)

2024-02-07

我在用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";
        }
    }
}

任何帮助将不胜感激(如果您需要代码的副本(这是一个 Adob​​e 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。不过我仍然需要光标方面的帮助。


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Starling 库 - 当我尝试将光标更改为图像时...它不起作用(并且精灵元素从舞台上消失) 的相关文章

  • 在 AS3 中将 Little-endian ByteArray 转换为 Big-endian

    AS3中如何将Little endian ByteArray转换为Big endian 我将 bitmapData 转换为 Big endian ByteArray 然后使用 Adob e Alchemy 将其推入内存 然后当我从内存中读取
  • Actionscript 3主类是根,但不允许动画虚拟相机

    我最近开始使用 Actionscript 3 学习 Animate CC 我正在尝试使用 Animate 的 虚拟相机 功能 为我提供一个可以平移 旋转和缩放游戏的相机 当根没有子类时 很容易实现 Camera 例如 您可以在屏幕上放置一个
  • 调用控制器 Post 方法时遇到问题

    这是我的方法 AcceptVerbs HttpVerbs Post public void SaveImage FormCollection formValues byte contents Convert FromBase64String
  • 在 Mac OS X (Mavericks) 上的 Adob​​e AIR 中的两台显示器上显示两个全屏窗口

    我使用的是 Mac OS X Mavericks 使用 Adob e AIR 我想在两个显示器 内置笔记本电脑视网膜显示器和外部 HDMI 显示器 上分别显示单独的全屏窗口 我可以在主显示器上获得全屏窗口 在辅助显示器上获得几乎全屏的窗口
  • C# - 平移光标

    我正在 PictureBox 控件中实现大图像的平移 并且设置适当的方向平移光标没有问题 但是 我似乎找不到用于平底锅原点的图像 内部带有箭头的圆圈 我在哪里可以找到它 我觉得image您正在寻找的内容未包含在框架中 每个应用程序都使用自己
  • AS3 是否可以复制 Shape 对象?

    我正在尝试制作一个可用于复制的形状 这是我所做的 我正在尝试做的以及我陷入困境的解释 在 Flash IDE 画笔 中手动绘制形状 创建了一个包含形状的新影片剪辑 作为一个类导出 实例化该类 var mc MovieClip new sha
  • 如何通过使用内置的 Date 类来节省时间?

    这个问题的目的是使用内置的 Date 类收集日期 时间计算的解决方案 而不是编写冗长的复杂函数 我会自己写一些答案 如果有人想出一些非常聪明的东西 我会接受答案 但这主要是作为解决方案的集合 因为我经常看到处理日期的代码过于复杂 请记住这是
  • as3 事件 - 类型强制失败?

    我正在将事件从孩子发送到父母 swf 它工作正常 直到我使用预加载器 swf 加载父级 然后父级停止从子级获取事件 我现在收到此错误 TypeError Error 1034 Type Coercion failed cannot conv
  • 将应用程序状态保存在磁盘或其他位置,以便用户稍后访问它

    In 弹性构建器 4 5我正在做一个像这样的项目cacoo http www cacoo com 我想保存diagrams display object ui components text 在将应用程序关闭到应用程序之后我无法访问的某个地
  • 流媒体视频文件?

    我需要流式传输 flv 文件 流媒体应该看起来像直播 我应该有一种方法可以更改目标文件 抱歉我的英语不好 如果 流式传输 的意思是 显示 Flash 视频剪辑 则 flv streaming 并不是真正的流式传输 而是正常的文件传输 即使文
  • mongoDB 中的游标隔离

    首先请原谅我问了一个愚蠢的问题 但我是 mongodb 和学习游标的新手 我有一个问题 为什么我们需要游标隔离 手册说 如果文档发生更改 对文档的干预写入操作可能会导致游标多次返回该文档 我无法理解这一点 如果有人可以提供更多说明或举一些例
  • 使用 Flash 在本地托管游戏?

    我只是找不到合适的谷歌搜索词 是否可以使用 Flash 或 Flash 兼容服务 来允许游戏中的玩家通过 Web 浏览器托管自己的游戏 使用自己的带宽 在某种程度上 从他们的计算机运行他们自己的游戏服务器 对于 Flash 浏览器内游戏 但
  • Random.Next() 的 Actionscript 3 实现

    我想知道 AS 3 中是否有很好的 Random Next 实现 基本上想要生成一系列给定种子的随机数 有时 最小和最大限制 类似于 C System Random 类 Random random new Random return ran
  • Flash 未在调试播放器中显示错误/堆栈跟踪(firefox/chrome/whatnot)

    我正在尝试调试在线默默地失败的应用程序 我 100 确定我正在运行 Flash 调试播放器 为了确保我不会丢失它 我故意抛出一个错误 但 Flash 在浏览器中没有显示任何 stracktrace 我快要失去它了 有什么线索吗 我正在 ch
  • 正确地将 flash.utils.Dictionary 序列化为 SharedObject

    我的 Flex 项目中有一个名为 HashMap 的便利集合类 它本质上是 flash utils Dictionary 的包装器 带有一堆便利方法和添加的 同步的 ArrayCollection 以便我可以将 HashMap 传递给需要的
  • 具有动态调整大小的 CSS 精灵

    我决定为我的整个网站 30 个图像 创建一个精灵表 这样我就可以加载 1 个图像并仅加载参考位置 从而减少图像加载时间和服务器调用 我的问题 是否可以引用 sprite 表中的图像 然后将该图像调整为其父容器的 100 例如 SomeDiv
  • AS3 [Event(name="", type="")],有什么意义?

    我使用 FlashDevelop3 R2 和 Flex 3 3 SDK 进行开发 在很多情况下我必须使用嵌入元数据标签 如下所示 Embed source path to file private var Asset Class 我很好地理
  • OpenGL ES 2.0 中的纹理点?

    我正在尝试在 OpenGL ES 2 0 中为粒子系统实现纹理点 例如点精灵 我遇到的问题是所有点都渲染为实心黑色方块 而不是正确映射纹理 我已经验证 gl PointCoord 实际上返回从 0 0 到 1 0 的 x y 值 这将映射到
  • 如何从 JW Player 5.1 中提取 .flv 流?

    问题是我的互联网连接速度很慢 并且视频不像 YouTube 那样缓冲 因此我想知道是否可以提取 JW Player 中正在流式传输的 flv 文件的 url 并直接下载它 做了一些初步研究 我发现了以下信息 主要视频网址 http ijf1
  • 在 ActionScript 3 中在形状上绘制文本

    有没有办法仅使用 ActionScript 在 DisplayObject 或 Shape 中绘制文本 我在网上找到的唯一方法是创建 TextField 但我无法将 TF 添加到 DisplayObject 或 Shape Edit 解决了

随机推荐