我的代码有效(不会失败),但它没有做正确的事。
每当我想生成一个新的“chunk”时,我就调用“generate”函数,每次调用时都会将新数字传递给函数。它生成的块很好,但它不会生成我想要它生成的内容。
如果前一代是空格,我希望它生成空格,跳跃,幻灯片或间隙。但如果前一代不是空间,则产生一个空间。 它没有这样做。它有时会产生2个间隙,2个跳跃或2个幻灯片,我不知道为什么...... ???
这是我的代码:
var ptg = 'space'; // what was previously generated to top
var wtgt; // what is currently being generated to top
var chunktogenerateto = 0;
function generate(a){
chunktogenerateto = a;
var rand1 = Math.floor(Math.random()*100) + 1;
if(ptg == 'space' && rand1 <= 25){
wtgt = 'space';
}
else if(ptg == 'space' && rand1 <= 50 && rand1 > 25){
wtgt = 'jump';
}
else if(ptg == 'space' && rand1 <= 75 && rand1 > 50){
wtgt = 'slide';
}
else if(ptg == 'space' && rand1 > 75){
wtgt = 'gap';
}
else{
wtgt = 'space';
}
ptg = wtgt;
topGen(wtgt);
}
function topGen(g){
document.getElementById('t' + chunktogenerateto).setAttribute('src','images/terrain/t' + g + '.png');
}
我希望这不是一个错字......帮助!
“生成”的调用来自:
var chunkpos = new Array();
chunkpos[0] = -100;
chunkpos[1] = 0;
chunkpos[2] = 100;
chunkpos[3] = 200;
chunkpos[4] = 300;
chunkpos[5] = 400;
chunkpos[6] = 500;
chunkpos[7] = 600;
chunkpos[8] = 700;
chunkpos[9] = 800;
chunkpos[10] = 900;
chunkpos[11] = 1000;
var temppos = new Array();
var time1;
var millis1;
var time2;
var millis2;
var millis3;
var firstreset = true;
var pos;
var poschange;
function moveLevel(){
if(firstreset == true){
resetTime();
}
var time2 = new Date();
var millis2 = time2.getTime();
var millis3 = millis2 - millis1;
poschange = Math.floor(millis3 / 5);
for(i = 0; i < chunkpos.length; i++){
temppos[i] = chunkpos[i] - poschange;
if(temppos[i] <= -150){
generate(i);
temppos[i] += 1200;
}
pos = temppos[i];
document.getElementById('chunk' + i).setAttribute('style','left: ' + pos + 'px;');
}
}
function resetTime(){
time1 = new Date();
millis1 = time1.getTime();
if(firstreset != true){
for(i = 0; i < chunkpos.length; i++){
chunkpos[i] = temppos[i];
}
}
firstreset = false;
setTimeout('resetTime()',1000);
}
对“moveLevel”的调用来自:
window.onload = function(){
if(test = 'runnable')
{
gameLoop();
}
else
{
document.getElementById('gm').innerHTML = (gm + 'Failed to run game.');
}
}
function gameLoop(){
if(currentscreen == 'playing'){
moveLevel();
}
setTimeout('gameLoop()',0);
}
以下是包含所有代码的zip文件的下载链接: ParkourFreak.zip 我遇到问题的代码是在scripts / generation.js下。 主要游戏页面(生成可见的是index.html。
答案 0 :(得分:1)
而不是每个if语句以“if(ptg =='space'...... etc”)开头 - 首先在一个简单的“if not space return space”中执行此操作。
之后,您可以随意开始 - 这应该适合您。
答案 1 :(得分:0)
大约四分之一的时间你以前有空间,因为这段代码会产生另一个空间:
if(ptg == 'space' && rand1 <= 25){
wtgt = 'space';
}
请注意,它在以前创建空间时创建了一个空格。
旁注:
此行不需要&& rand1 > 25
:
else if(ptg == 'space' && rand1 <= 50 && rand1 > 25){
由于您之前有if(ptg == 'space' && rand1 <= 25){
,因此rand1
<= 25
的{{1}}行不可能ptg == 'space'
。
(类似于以下条件下的&& rand2 > 50
。)
答案 2 :(得分:0)
您确定要增加chunktogenerateto
吗?
当前代码似乎保持为0,是否在您未显示的段中?
编辑:哦,这是函数的参数。尝试记录该变量,也许这就是问题?
答案 3 :(得分:0)
// elsewhere
var wtgts = ['space','jump','slide','gap'];
// in the function
if(ptg !== 'space') {
wtgt = 'space';
} else {
var randidx = Math.floor(Math.random()*4);
wtgt = wtgts[randidx];
}
甚至在功能中:
var newidx = (ptg == 'space') ? Math.floor(Math.random()*4) : 0;
wtgt = wtgts[newidx];
答案 4 :(得分:0)
我认为这个问题与这一代人有关,而事实上我所要做的就是要解决这个问题:
if(temppos[i] <= -100){
generate(i);
temppos[i] += 1200;
}
到此:
if(temppos[i] <= -100){
generate(i);
chunkpos[i] += 1200;
temppos[i] += 1200;
}