如何在地图上生成对象,而不会占用相同的空间或在 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