【发布时间】:2012-12-31 02:40:29
【问题描述】:
如何在地图上生成对象,而不让它们占用相同的空间或在 HTML5 画布上重叠?
X 坐标在一定程度上是随机生成的。我想检查数组内部是否已经存在,以及之后的 20 个值(以考虑宽度),但没有运气。
var nrOfPlatforms = 14,
platforms = [],
platformWidth = 20,
platformHeight = 20;
var generatePlatforms = function(){
var positiony = 0, type;
for (var i = 0; i < nrOfPlatforms; i++) {
type = ~~(Math.random()*5);
if (type == 0) type = 1;
else type = 0;
var positionx = (Math.random() * 4000) + 500 - (points/100);
var duplicatetest = 21;
for (var d = 0; d < duplicatetest; d++) {
var duplicate = $(jQuery.inArray((positionx + d), platforms));
if (duplicate > 0) {
var duplicateconfirmed = true;
}
}
if (duplicateconfirmed) {
var positionx = positionx + 20;
}
var duplicateconfirmed = false;
platforms[i] = new Platform(positionx,positiony,type);
}
}();
我最初通过让它们生成在大约 4000 大的区域中来进行作弊修复,降低了几率,但我想随着游戏的进行增加难度,通过让它们看起来更在一起,使其更难。但随后它们重叠。
粗略的图片形式,我想要这个
....[]....[].....[]..[]..[][]...
不是这个
......[]...[[]]...[[]]....[]....
我希望这是有道理的。
作为参考,这里是数组检查和难度之前的代码,只是便宜的距离破解。
var nrOfPlatforms = 14,
platforms = [],
platformWidth = 20,
platformHeight = 20;
var generatePlatforms = function(){
var position = 0, type;
for (var i = 0; i < nrOfPlatforms; i++) {
type = ~~(Math.random()*5);
if (type == 0) type = 1;
else type = 0;
platforms[i] = new Platform((Math.random() * 4000) + 500,position,type);
}
}();
编辑 1
经过一些调试,重复返回 [object Object] 而不是索引号,但不知道为什么
编辑 2
问题是对象在数组平台中,而x在数组对象中,那么我该如何再次搜索呢? ,这就是它之前失败的原因。 感谢 firebug 和 console.log(platforms);
platforms = [Object { image=img, x=1128, y=260, more...}, Object { image=img, x=1640, y=260, more...} etc
【问题讨论】:
-
对象的宽度是否可变?
-
@JasonSperske 没有 20px 的固定宽度
-
您可以将它们映射到一个网格(将对象捕捉到 20 个像素增量),然后跟踪填充在 2d 散列对象中的内容。
-
@Shmiddty 我该怎么做?
标签: javascript arrays html canvas