我已经在createJS中看到了10种不同的Spritesheets实现。我已经尝试了许多不同的方法,但是无法让我的Spritesheet出现在舞台上。在研究Google Chrome浏览器工具时,我在对象层次结构中看到了从Spritesheet创建的Sprite对象,但是无论如何我似乎都无法将其显示在舞台上。

也许有人以前这样做过,然后看到了我的错误之处。相关代码如下。

function handleBatLoad()
{
    var spriteSheet = new createjs.SpriteSheet({
            "images": [batImage],
            "frames": {"width": 170, "height": 142},
            "animations": { "flap": [0,5] }
    });

    animation = new createjs.Sprite(spriteSheet, "flap");
    animation.gotoAndPlay("flap");
    animation.x = 100;
    animation.y = 100;
    spriteSheet.getAnimation("flap").frequency = 2;
    spriteSheet.getAnimation("flap").next = "flap";
    animation.gotoAndPlay("flap");
    stage.addChild(animation);
    Ticker.setFPS(60);
    Ticker.addListener(stage);
    stage.update();
}


如果查看完整的代码对您有帮助:https://github.com/mlassoff/30MinuteGame

提前致谢。

最佳答案

我测试了您的代码,经过一些调试后发现您的错误是:spritesheet中的图像高度过高。您将高度设置为142px,但PNG图片为117px。如果更改它,将显示图像。如果您提供的精灵高度大于图像,似乎createjs崩溃。

顺便说一句,您在这里也有错误:

Ticker.setFPS(60);
Ticker.addListener(stage);


您需要为此更改

createjs.Ticker.setFPS(60);
createjs.Ticker.addEventListener(stage);


我看到很多代码应该更改:


您应该使用preloadjs加载batSpritesheet.png图像(就像处理其他资产一样)
您在handleMouseMove中的代码将使应用程序崩溃:在舞台上添加一个子级,并在每次鼠标移动时刷新舞台,这很糟糕。您只需要在游戏加载时添加一次crossHair图像,然后在mousemove上更改其位置,并使用股票行情显示


无论如何,我对您的代码进行了一些验证,将其与您的实际代码进行比较以了解我为什么这样做,并在您的游戏开发中玩得开心,HTML5和createjs与:D一起玩真的很有趣

var context;
var queue;
var WIDTH = 1024;
var HEIGHT = 768;
var mouseXPosition;
var mouseYPosition;
var batImage;
var stage;
var animation;
var crossHair;

window.onload = function()
{
    /*
     *      Set up the Canvas with Size and height
     *
     */
    var canvas = document.getElementById('myCanvas');
    context = canvas.getContext('2d');
    context.canvas.width = WIDTH;
    context.canvas.height = HEIGHT;
    stage = new createjs.Stage("myCanvas");

    /*
     *      Set up the Asset Queue and load sounds
     *
     */
    queue = new createjs.LoadQueue(false);
    queue.installPlugin(createjs.Sound);
    queue.on("complete", queueLoaded, this);
    createjs.Sound.alternateExtensions = ["ogg"];

    queue.loadManifest([
        {id: 'backgroundImage', src: 'assets/background.png'},
        {id: 'crossHair', src: 'assets/crosshair.png'},
        {id: 'shot', src: 'assets/shot.mp3'},
        {id: 'background', src: 'assets/countryside.mp3'},
        {id: 'batSpritesheet', src: 'assets/batSpritesheet.png'},
    ]);
    queue.load();
}

function queueLoaded(event)
{
    // Add background image
    var backgroundImage = new createjs.Bitmap(queue.getResult("backgroundImage"))
    stage.addChild(backgroundImage);

    // Play background sound
    createjs.Sound.play("background", {loop: -1});

    // Create bat spritesheet
    var spriteSheet = new createjs.SpriteSheet({
        "images": [queue.getResult('batSpritesheet')],
        "frames": {"width": 198, "height": 117},
        "animations": { "flap": [0,4] }
    });

    // Create bat sprite
    animation = new createjs.Sprite(spriteSheet, "flap");
    animation.x = 100;
    animation.y = 100;
    animation.gotoAndPlay("flap");
    stage.addChild(animation);

    // Create crosshair
    crossHair = new createjs.Bitmap(queue.getResult("crossHair"));
    stage.addChild(crossHair);

    // Add ticker
    createjs.Ticker.setFPS(60);
    createjs.Ticker.addEventListener('tick', stage);

    // Set up events AFTER the game is loaded
    window.onmousemove = handleMouseMove;
    window.onmousedown = handleMouseDown;
}

function handleMouseMove(event)
{
    crossHair.x = event.clientX-45;
    crossHair.y = event.clientY-45;
}

function handleMouseDown(event)
{
    createjs.Sound.play("shot");
}

关于javascript - 使用createJS库正确实现Spritesheet吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21633610/

10-16 19:19