我已经在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/