我正在尝试使用p5.play.js中的collide()方法计算我的游戏分数,这样每当apple
点击hero
时,分数就会增加1。除了得分,一切都很好。无论apple
是否与hero
发生碰撞,我的分数都会不断更新。
这是我的draw()
功能
function draw() {
background(backdrop);
drawSprite(hero);
for(i=0; i<apples.length; i++)
{
apples[i].spr.collide(hero, scoreUpdate);
if(cell[i] == 1 && previousGen[i] == 0)
{
apples[i].fall();
}
else if(cell[i] == 0 && previousGen[i] == 1 )
{
obstacles[i].fall();
}
}
text("score: " + score, width-100, 20);
for(i=0; i<apples.length; i++)
{
if(apples[i].spr.position.y > height)
{
generationEnd = true;
apples[i].spr.position.y=100;
obstacles[i].b.position.y=100;
}
else
{
generationEnd=false;
break;
}
}
if(generationEnd==true)
newGeneration();
}
这是scoreUpdate()
函数
function scoreUpdate(apple, hero)
{
score++;
apple.position.y = height+10;
}
有人可以帮我解决这个问题吗?感谢。
答案 0 :(得分:0)
注意Javascript分号注入。始终在与if / for / for ... in / while / etc相同的行上启动代码块。语句,否则将在该行的末尾插入分号,结束if语句并使其仅执行“;”如果陈述是真的。因此,您的其他代码实际上不在if语句中。你的循环也一样。
修正了JS:
function draw() {
background(backdrop);
drawSprite(hero);
for(i=0; i<apples.length; i++){
apples[i].spr.collide(hero, scoreUpdate);
if(cell[i] == 1 && previousGen[i] == 0){
apples[i].fall();
}
else if(cell[i] == 0 && previousGen[i] == 1 ){
obstacles[i].fall();
}
}
text("score: " + score, width-100, 20);
for(i=0; i<apples.length; i++){
if(apples[i].spr.position.y > height){
generationEnd = true;
apples[i].spr.position.y=100;
obstacles[i].b.position.y=100;
}
else{
generationEnd=false;
break;
}
}
if(generationEnd==true){
newGeneration();
}
}
为了安全起见:
function scoreUpdate(apple, hero){
score++;
apple.position.y = height+10;
}
答案 1 :(得分:0)
所以我修好了。问题是我正在调用collide()函数,而不管苹果是否在下降。我在苹果摔倒后立即调用了碰撞功能,所以它因某种原因起作用,如果苹果掉落,检查碰撞甚至听起来合乎逻辑。这是更新的draw()
函数
function draw() {
background(backdrop);
drawSprite(hero);
for(i=0; i<apples.length; i++){
if(cell[i] == 1 && previousGen[i] == 0){
apples[i].fall();
apples[i].spr.collide(hero, scoreUpdate);
}
else if(cell[i] == 0 && previousGen[i] == 1 ){
obstacles[i].fall();
}
}
text("score: " + score, width-100, 20);
for(i=0; i<apples.length; i++){
if(apples[i].spr.position.y > height){
generationEnd = true;
apples[i].spr.position.y=100;
obstacles[i].b.position.y=100;
}
else{
generationEnd=false;
break;
}
}
if(generationEnd==true)
newGeneration();
}