我最近开始编写代码,并想尝试Pico-8。一个使用Lua的游戏开发平台。我看了关于如何创建平台的教程,但我的代码遇到了障碍。代码中的Spid是我的主sprite的名称,我已经将一些代码组织成了几个部分: init、update、draw、collisions和player。如果有人可以帮助我与我的错误,请记住,我几乎没有或没有编码经验。
错误消息:
Runtime error line 26 tab 4
If spid.dy>0 then
attempt to index global 'spid' (a nil value)
at line 26 tab 4购物车代码
pico-8 cartridge // http://www.pico-8.com
version 18
__lua__
--init
function _init()
spid={
sp=1,
x=59,
y=59,
h=8,
w=8,
dx=0,
dy=0,
maxdx=2,
maxdy=3,
acc=0.4,
boost=4,
anim=0,
running=false,
jumping=false,
falling=false,
crouching=false,
flp=false,
}
grav=1.2
friction=0.85
end
-->8
--update
function _update()
spid.x+=spid.dx
spid.y+=spid.dy
spid_update()
spid_animation()
end
-->8
--draw
function _draw()
cls()
spr(spid.sp,spid.x,spid.y,1,1,spid.flp)
map(0,0)
end
-->8
--collisions
function obj_collision(obj,aim,flag)
--obj = table and needs x,y,w,h
local x=obj.x local y=obj.y
local w=obj.w local h=obj.h
local x1=0 local y1=0
local x2=0 local y2=0
if aim=="left" then
x1=x-1 y1=y
x2=x y2=y+h-1
elseif aim=="right" then
x1=x+w y1=y
x2=x+w+1 y2=y+h-1
elseif aim=="up" then
x1=x+1 y1=y-1
x2=x+w-1 y2=y
elseif aim=="down" then
x1=x y1=y+h
x2=x+w y2=y+h
end
-- convert pixels to tiles
x/=8 y1/=8
x/=8 y2/=8
if fget(mget(x1,y1),flag)
or fget(mget(x1,y2),flag)
or fget(mget(x2,y1),flag)
or fget(mget(x2,y2),flag) then
return true
else
return false
end
end
-->8
--player
function spid_update()
spid.dy+=grav
spid.dx*=friction
end
if btn(2) then
spid.dx-=spid.acc
spid.running=true
spid.flp=true
end
if btn(1) then
spid.dx+=spid.acc
spid.running=true
spid.flp=false
end
if btnp(❎)
and spid.landed then
spid.dy-=spid.boost
spid.landed=false
end
if spid.dy>0 then
spid.falling=true
spid.landed=false
spid.jumping=false
end
if obj_collision(spid,"down",0) then
spid.landed=true
spid.falling=false
spid.dy=0
spid.y-=(spid.y+spid.h)%8
elseif spid.dy<0 then
spid.jumping=true
if obj_collision(spid,up,1) then
spid.dy=0
end
end
if spid.dx<0 then
if obj_collision(spid,"left",1) then
spid.dx=0
end
elseif spid.dx>0 then
if obj_collion(spid,"right",1) then
spid.dx=0
end
end发布于 2020-05-13 06:37:49
在选项卡4上的函数中有一个额外的end
我假设在线上的end,spid.dx*=friction不属于那里。更正此pico-8错误后,报告spid_animation()不存在,这在提供的代码中是不存在的。
function spid_update()
spid.dy+=grav
spid.dx*=friction
end
if btn(2) then
spid.dx-=spid.acc
spid.running=true
spid.flp=true
end我建议您将if/end排在同一列上,使它们保持整齐。通过这种方式,可以更容易地查看代码的边距,并知道if语句、函数等的结尾。
例如,而不是:
if btn(2) then
spid.dx-=spid.acc
spid.running=true
spid.flp=true
end使用:
if btn(2) then
spid.dx-=spid.acc
spid.running=true
spid.flp=true
end这看起来是一件小事,但是当你有很多嵌套的代码时,它将使阅读变得容易得多。
Pico-8文件也可以使用外部编辑器进行编辑。当遇到这样的问题(不明显的bug)时,我发现这特别有用。例如,你可以一次看到更多的代码,他们可以突出显示缺少/多余的结尾。
有关使用外部编辑器的信息,请参阅可执行文件附带的手册:https://www.lexaloffle.com/pico-8.php?page=manual
https://stackoverflow.com/questions/61558345
复制相似问题