gpt4 book ai didi

javascript - 如何让 rpg map 随着玩家到达边界而扩展? Javascript HTML5

转载 作者:搜寻专家 更新时间:2023-10-31 08:20:14 24 4
gpt4 key购买 nike

我正在努力在谷歌上找到我的问题的答案,所以我想发帖。

我仅使用 html5、javascript 和 jquery 构建了一个自上而下的基于图 block 的 rpg 游戏。

我已经在数组中设置了图像。我已经在一个数组中设置了我的 map ,并循环遍历它以在屏幕上显示图 block 。

我想在 Canvas 上显示一个 750 像素 x 600 像素的大 map 部分,当玩家移动到 4 个边界之一时, map 将更新并显示 map 的下一部分,或者如果没有 map 可用,则保持原样是的。

我将如何实现?

如果你不明白我在问什么,请尝试更好地解释 :p 但这是我的代码:

$(document).ready(function(){

var canvas = $("#TBG");
var context = canvas.get(0).getContext("2d");

var canvasWidth = canvas.width();
var canvasHeight = canvas.height();

//Player Controls -------------------------------------------------------------------------
$(window).keydown(function(e){
var keyCode = e.keyCode;
if (keyCode == arrowRight){
Player.moveRight = true;
}
else if (keyCode == arrowLeft){
Player.moveLeft = true;
}
else if (keyCode == arrowUp){
Player.moveUp = true;
}
else if (keyCode == arrowDown) {
Player.moveDown = true;
}
});
$(window).keyup(function(e){
var keyCode = e.keyCode;
if (keyCode == arrowRight){
Player.moveRight = false;
}
else if (keyCode == arrowLeft){
Player.moveLeft = false;
}
else if (keyCode == arrowUp){
Player.moveUp = false;
}
else if (keyCode == arrowDown) {
Player.moveDown = false;
}
});

function player() {

this.x = 100;
this.y = 100;
this.vX = 0;
this.vY = 0;

var moveRight = false;
var moveLeft = false;
var moveUp = false;
var moveDown = false;
}

var Player = new player();

var arrowLeft = 37;
var arrowUp = 38;
var arrowRight = 39;
var arrowDown = 40;

//End Player controls ------------------------------------------------------------------------------

//Map initialisation -------------------------------------------------------------------------------------

var images = new Array(3);

images[0] = new Image();
images[0].src = "images/player.png";

images[1] = new Image();
images[1].src = "images/wall.png";

images[2] = new Image();
images[2].src = "images/grass.png";

images[3] = new Image();
images[3].src = "images/floor.png";

var tileMap = [
[3,1,3,3,3,3,3,3,3,3],
[3,1,1,2,2,2,2,2,2,3],
[3,1,1,1,2,2,2,2,2,3],
[3,2,1,1,1,2,2,2,2,3],
[3,2,2,1,1,1,2,2,2,3],
[3,2,2,2,1,1,1,1,1,3],
[3,2,2,2,2,1,1,1,1,3],
[3,2,2,2,2,1,1,1,1,3],
[3,2,2,2,2,1,1,1,1,3],
[3,3,3,3,3,3,3,3,3,3]
];

//Animate Loop -------------------------------------------------------------------------------------------
function animate () {

context.clearRect(0,0,canvasWidth,canvasHeight);

Player.vX = 0;
Player.vY = 0;

//Player Animation
if (Player.moveRight) {
Player.vX =2;
};
if (Player.moveUp) {
Player.vY = -2;
};
if (Player.moveDown) {
Player.vY = 2;
};
if (Player.moveLeft) {
Player.vX = -2;
};

Player.x += Player.vX;
Player.y += Player.vY;

if (Player.x < 0){
Player.x = 0;
Player.vX *= -2;
}
else if (Player.x + 64 > canvasWidth) {
Player.x = canvasWidth - 64;
Player.vX *= -2;
};
if (Player.y < 0){
Player.y = 0;
Player.vY *= -2;
}
else if (Player.y + 64 > canvasHeight) {
Player.y = canvasWidth - 64;
Player.vY *= -2;
};

for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++){

var tileId = tileMap[i][j];
var tileWidth = 32;
var tileHeight = 32;

context.drawImage(images[tileId],i * tileWidth, j * tileHeight);
}

}
context.drawImage(images[0], Player.x, Player.y);

setTimeout(animate, 0);
}
// End Loop ------------------------------------------------------------------------------------------------

animate();

});

我不是很擅长 Javascript,但学习并了解编程方面的知识。

提前致谢汤姆

最佳答案

其实并没有什么特别的方法可以做到这一点(就像事件开发中的任何方法一样),但也许我可以提供一些帮助,因为我也在创建以地板为中心的事件。地板层并没有什么独特之处。这只是给图表的一个短语,可以在彼此之上填充。你甚至可以在你的整个事件中有一个部分,但你可以看到它不会执行的结果。如果有一个 5X5 的草坪位置并且你想在上面放一个灌木,那么在分区之间你只会看到任何颜色的资格,因为你改变了之前的草坪地板。有些人通过添加另一部分来放置灌木来解决这个问题。这样一来,第一部分上面就有草坪,灌木看起来就像在上面一样。不过,您可能必须对几种实际的植物使用多个级别才能获得您想要的效果。就我个人而言,我的事件可能只有一层。这将用于主要风景如草坪、灰尘等。然后我将有一个项目部分,其中我将有预制对象(可以是植物、花朵、坏人、房屋等),我的马达将带他们 Angular 色并弄清楚如何描绘它们。

对于初学者来说,您的个性可能会与显示器的侧面发生冲突。例如,为了与显示的其余部分发生冲突,您将检查表演者的 x 位置是否小于 0,如果是,则将其设置为 0。

接下来,您将希望能够在显示器上绘制地板草图。您可以使用整数范围来表示平面图。不同的数字表示您必须绘制的不同地板设计。因此,3X3 范围的“0”将是一张 map ,表示 3X3 行的草坪地板,而“1”可能是水或其他东西。您可以从文本/二进制计算机文件或 XML 计算机文件或其他文件中获取这些数字。由于您考虑的是 XML,它通常只是一种人类可读的购物细节方式。 XML 细节实际上并没有做任何事情(在某种意义上),这取决于您的系统是否理解它。

另一个建议是,由于您使用的是 SFML,因此可以使用“ View ”来移动摄影机。查看 SFML 网页了解如何使用它们。

现在是我最好的推荐。我的发布相对无法解释,但我描述的所有内容都在 Chip Gravelyn 的地面电机指南中得到保护。它是用 C# 发布的,他在开发楼层经理方面做了很多事情,但您仍然可以将他的事情实现到您的 C++/SFML 事件中。在线查找“NIckGravelyn”。 com.

关于javascript - 如何让 rpg map 随着玩家到达边界而扩展? Javascript HTML5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314506/

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