Hi all, I am very new to Lua programming - have been learning a bit of python and Gamemaker GML over the past year so still pretty fresh all round.
I have just finished coding the smoke particle but am getting the following error when trying to run it and I can't work out why:
SYNTAX ERROR LINE 10
<EOF>
')' EXPECTED NEAR '.4'
Here is my actual code:
function make_smoke(x,y,init_size,col) local s={} s.x=x s.y=y s.col=col s.width=init_size s.width_final=init_size+rnd(3)+1 s.t=0 --how long lasts secs s.max_t=30+rnd(10) --how long lasts secs s.dx=(rnd(.8).4) s.dy=rnd(.05) s.ddy=.02 --simulate yaxis accel. add(smoke,s) return s end function _init() smoke={} cursorx=50 cursory=50 color=7 end function move_smoke(sp) if (sp.t>sp.max_t)then del(smoke,sp) end if(sp.t>sp.max_t15)then sp.width+=1 sp.width=min(sp.width,sp.width_final) end sp.x=sp.x+sp.dx sp.y=sp.y+sp.dy sp.dy=sp.dy+sp.ddy sp.t=sp.t+1 end function _update() foreach(smoke,move_smoke) if btn(0,0)then cursorx=1 end if btn(1,0)then cursorx+=1 end if btn(2,0)then cursory-=1 end if btn(3,0)then cursory+=1 end if btn(4,0)then color=flr(rand(16))end make_smoke(cursorx,cursory,rnd(4),color) end function draw_smoke(s) circfill(s.x,s.y,s.width,s.col) end function_draw() cls() foreach(smoke,draw_smoke) end |
Any ideas on what I have done wrong?
:) Mike
When I ran into this problem, I just put a * in front of the .4! I don't think parenthetical multiplication works when the parentheses are calling a function.
change s.dx=(rnd(.8).4) to s.dx=(rnd(.8)*.4) |
should do the trick
Thanks to both of you, that fixed that little problem now I have this:
SYNTAX ERROR LINE 53
<EOF>
<EOF> EXPECTED NEAR 'END'
Any idea what I haven't done right at end of code?
function_draw() |
should be
function _draw() |
note the space
(ignore my thoughts on foreach)
if btn(0,0)then cursorx=1 end |
should be
if btn(0,0)then cursorx-=1 end |
otherwise left cursor control doesn't work correctly
then just:
if (sp.t > sp.max_t15) then |
should be
if (sp.t > sp.max_t+5) then |
also see: https://www.lexaloffle.com/bbs/?tid=3260
Actually foreach() is a built-in function that takes a sequence and a function. It calls the function for each element in the sequence. It is not a loop and doesn't take a block (no do or end). It looks correct in the above code.
I believe the original intent was
if (sp.t > sp.max_t-15) then |
because the article says "Then we grow the width of the particle if we are within 15 steps of the end of its life".
And it makes sense because smoke thickens as it departs from its origin.
[Please log in to post a comment]