gpt4 book ai didi

javascript - 为什么我的 Sprite 不会出现在我的背景之上?

转载 作者:行者123 更新时间:2023-11-28 16:44:53 25 4
gpt4 key购买 nike

我一直在为我将要制作的游戏练习使用 sprite,并且观看并阅读了一些教程,我认为我已经接近让我的 sprite 出现,所以我终于可以开始我的游戏了,但是在练习时我无法获得它工作,我没有 2 个单独的教程,我可以让 Sprite 和背景自己出现,但不能让它们一起工作,我也一直在使用 EaselJS。一些 Sprite 动画代码也从教程中复制而来。

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>sprite prac<title>

<!-- EaselJS library -->
<script src="lib/easel.js"></script>
<script>



// Initialize on start up so game runs smoothly
function init() {

canvas = document.getElementById("canvas");
stage = new Stage(canvas);

bg = new Image();
bg.src = "img/grassbg.jpg";
bg.onload = setBG;
stage.addChild(background);

imgMonsterARun = new Image();
imgMonsterARun.onload = handleImageLoad;
imgMonsterARun.onerror = handleImageError;
imgMonsterARun.src = "img/MonsterARun.png";

stage.update();
}

function handleImageLoad(e) {
startGame();
}

// Simple function for setting up the background
function setBG(event){
var bgrnd = new Bitmap(bg);
stage.addChild(bgrnd);
stage.update();
}

function startGame() {
// create a new stage and point it at our canvas:
stage = new createjs.Stage(canvas);

// grab canvas width and height for later calculations:
screen_width = canvas.width;
screen_height = canvas.height;

// create spritesheet and assign the associated data.
var spriteSheet = new createjs.SpriteSheet({
// image to use
images: [imgMonsterARun],
// width, height & registration point of each sprite
frames: {width: 64, height: 64, regX: 32, regY: 32},
animations: {
walk: [0, 9, "walk"]
}
});

// create a BitmapAnimation instance to display and play back the sprite sheet:
bmpAnimation = new createjs.BitmapAnimation(spriteSheet);

// start playing the first sequence:
bmpAnimation.gotoAndPlay("walk"); //animate

// set up a shadow. Note that shadows are ridiculously expensive. You could display hundreds
// of animated rats if you disabled the shadow.
bmpAnimation.shadow = new createjs.Shadow("#454", 0, 5, 4);

bmpAnimation.name = "monster1";
bmpAnimation.direction = 90;
bmpAnimation.vX = 4;
bmpAnimation.x = 16;
bmpAnimation.y = 32;

// have each monster start at a specific frame
bmpAnimation.currentFrame = 0;
stage.addChild(bmpAnimation);

// we want to do some work before we update the canvas,
// otherwise we could use Ticker.addListener(stage);
createjs.Ticker.addListener(window);
createjs.Ticker.useRAF = true;
createjs.Ticker.setFPS(60);
}

//called if there is an error loading the image (usually due to a 404)
function handleImageError(e) {
console.log("Error Loading Image : " + e.target.src);
}

function tick() {
// Hit testing the screen width, otherwise our sprite would disappear
if (bmpAnimation.x >= screen_width - 16) {
// We've reached the right side of our screen
// We need to walk left now to go back to our initial position
bmpAnimation.direction = -90;
}

if (bmpAnimation.x < 16) {
// We've reached the left side of our screen
// We need to walk right now
bmpAnimation.direction = 90;
}

// Moving the sprite based on the direction & the speed
if (bmpAnimation.direction == 90) {
bmpAnimation.x += bmpAnimation.vX;
}
else {
bmpAnimation.x -= bmpAnimation.vX;
}

// update the stage:
stage.update();
}




</script>

</head>

<body onload="init();">
<canvas id="canvas" width="500" height="500" style="border: thin black solid;" ></canvas>
</body>
</html>

最佳答案

有几个地方您使用了一些非常古老的 API,这些 API 可能受支持也可能不受支持,具体取决于您的 EaselJS 版本。你从哪里得到你引用的 easel.js 脚本?

假设您有一个与您正在使用的 API 相匹配的 EaselJS 版本,则存在一些问题:

  1. 您将背景 添加到舞台。没有 background,因此您在添加它时可能会遇到错误。您已经在 setBackground 方法中添加了 bgrnd,这应该没问题。 如果您在此处遇到错误,那么这可能是您的主要问题。
  2. 您不需要在每次添加内容时更新舞台,只需在您希望舞台“刷新”时更新即可。在您的代码中,您在设置背景后更新,并在 init() 结束时再次更新。这些将一个接一个地发射。

您的控制台是否出现错误?那将是开始调试的好地方。如果您仍然遇到问题,我还建议您发布代码以展示实际的演示,这将有助于确定发生了什么。

如果您有较新版本的 EaselJS:

  1. BitmapAnimation 现在是 Sprite,并且不支持 direction。要翻转 Sprites,请使用 scaleX=-1
  2. Ticker 不再使用 addListener。相反,它使用 EventDispatcher。 createjs.Ticker.addEventListener("tick", tickFunction);

您可以在 http://code.createjs.com 获得新版本的 CreateJS 库,您可以在 website 上获取更新的示例和代码和 GitHub .

关于javascript - 为什么我的 Sprite 不会出现在我的背景之上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com