gpt4 book ai didi

javascript - 我如何使用 p5.js 在 Canvas 上绘制瓷砖

转载 作者:行者123 更新时间:2023-11-30 06:11:19 28 4
gpt4 key购买 nike

我正在尝试使用 p5.js 制作一个 html5 游戏,我尝试实现的第一件事是绘制一个 tilemap,但我的代码不起作用。

我使用嵌套循环来绘制图 block ,但我需要更快的东西,我找到了一个其他使用一维数组绘制图 block 的算法我试过那个算法但它不起作用,我不知道为什么?

let tileset;
let map = [
0, 0, 0,
0, 0, 0,
1, 1, 1
];

function preload() {
tileset = loadImage("./tileset.png");
}

function setup() {
createCanvas(500, 500);
}

function draw() {
background(0);
drawTiles(map, 3, 11);
}

function drawTiles(map, cols, tilesize) {
for (let i = map.length - 1; i > -1; --i) {
let value = map[i];
// source x , y
let sx = (value % cols) * tilesize;
let sy = Math.floor(value / cols) * tilesize;
// distenation x , y
let dx = (i % cols) * tilesize;
let dy = Math.floor(i / cols) * tilesize;
// render image
image(tileset, sx, sy, tilesize, tilesize, dx, dy, tilesize, tilesize);
}
}

最佳答案

您已经交换了源和目标。在 image第一个矩形区域(参数 2 -5)定义窗口中的目标,第二个矩形区域(参数 6 - 9)定义图像中的源矩形(tileset):

image(tileset, sx, sy, tilesize, tilesize, dx, dy, tilesize, tilesize);

image(tileset, dx, dy, tilesize, tilesize, sx, sy, tilesize, tilesize);

由于目标网格 an 和源 tileset 具有不同的列数,函数 drawTiles 需要 2 列参数 (d_cols , c_cols):

function draw() {
background(0);
drawTiles(map, 3, 2, 11);
}
function drawTiles(map, d_cols, s_cols, tilesize) {
for (let i = map.length - 1; i > -1; --i) {
let value = map[i];
// source x , y
let sx = (value % s_cols) * tilesize;
let sy = Math.floor(value / s_cols) * tilesize;
// distenation x , y
let dx = (i % d_cols) * tilesize;
let dy = Math.floor(i / d_cols) * tilesize;
// render image
image(tileset, dx, dy, tilesize, tilesize, sx, sy, tilesize, tilesize);
}
}

关于javascript - 我如何使用 p5.js 在 Canvas 上绘制瓷砖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58793198/

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