所以我对编程很陌生,目前正在试用pico-8的编码。
我开始了一场比赛,雪碧应该从顶端掉下来,当我和我的pset (点)相撞时,我希望我的分数能上升1。到目前为止,我遇到了两种不同的结果。第一种情况是,分数一直在以疯狂的速度上升,而每当我的分数超过精灵的左上方像素y和x时,分数就会上升。我不知道如何修正它,我真的想知道它到底出了什么问题。
(Tab 1)
col=11
sx=40
sy=20
x=64
y=64
score=0
function _init()
cls()
end
function _update()
cls()
movement()
border()
point()
sprite1()
if (x == sx) then score +=1 end
if (y == sy) then score +=1 end
end
(Tab 2)
function _draw()
print("score:",0,0)
print(score,25,0)
end
(Tab 3)
-- movement
function point()
pset(x,y,col)
end
function movement()
if btn(⬅️) then x -= 1 end
if btn(➡️) then x += 1 end
if btn(⬆️) then y -= 1 end
if btn(⬇️) then y += 1 end
end
-- sprite1
s1=1
function sprite1()
spr(s1,sx,sy)
end
(Tab 4)
-- border
function border()
if x>=127 then y=60 end
if x<=0 then y=60 end
if y>=127 then x=60 end
if y<=0 then x=60 end
if x>=127 then x=60 end
if x<=0 then x=60 end
if y>=127 then y=60 end
if y<=0 then y=60 end
end发布于 2022-02-04 10:53:46
你有两个问题。主要是这两条线:
if (x == sx) then score +=1 end
if (y == sy) then score +=1 end这不会增加分数“当像素接触sx,和sy”。相反,当像素与目标位于同一条水平线或垂直线上时,它将增加分数。
你想要的是一个同时检查两者的条件。为了做到这一点,您可以使用and。用这一行替换这两行:
if (x == sx and y == sy) then score += 1您所遇到的第二个问题是,此检查被评估为(每个帧)。因此,像素与目标重合的每一个帧,分数都会增加。考虑到游戏每秒30帧,得分增长非常快。
您需要的是一个额外的变量,以检查是否已经存在“触摸”。
您可以在表1中将其初始化为false:
touch = false然后在前一个if上使用它。我们想要的是:
当像素接触到目标时,
touch设置为true,这样下一帧就不会激活分数。当像素不触及目标时,必须将触摸重置为true。因此,将前面提到的行替换为以下内容:
if x == sx and y == sy then
if(not touch) score+=1
touch = true
else
touch = false
endhttps://stackoverflow.com/questions/70724066
复制相似问题