Zoeken…


Invoering

De PICO-8 is een fantasy-console geprogrammeerd in embedded Lua. Het heeft al goede documentatie . Gebruik dit onderwerp om ongedocumenteerde of ondergedocumenteerde functies te demonstreren.

Game loop

Het is heel goed mogelijk om PICO-8 als een interactieve shell te gebruiken , maar je wilt waarschijnlijk gebruikmaken van de gamelus. Om dit te doen, moet u ten minste een van deze callback-functies maken:

  • _update()
  • _update60() (na v0.1.8 )
  • _draw()

Een minimale "game" kan eenvoudig iets op het scherm tekenen:

function _draw()
  cls()
  print("a winner is you")
end

Als u _update60() definieert, probeert de _update60() te draaien op 60 fps en wordt update() (die op 30 fps draait) genegeerd. Beide updatefuncties worden aangeroepen vóór _draw() . Als het systeem gevallen frames detecteert, slaat het de tekenfunctie om het andere frame over, dus het is het beste om de spellogica en spelerinvoer in de updatefunctie te houden:

function _init()
  x = 63
  y = 63

  cls()  
end

function _update()
  local dx = 0 dy = 0

  if (btn(0)) dx-=1
  if (btn(1)) dx+=1 
  if (btn(2)) dy-=1 
  if (btn(3)) dy+=1 

  x+=dx
  y+=dy
  x%=128
  y%=128
end

function _draw()
  pset(x,y)
end

De functie _init() is strikt genomen optioneel omdat opdrachten buiten een functie bij het opstarten worden uitgevoerd. Maar het is een handige manier om het spel terug te zetten naar de beginvoorwaarden zonder de cartridge opnieuw op te starten:

if (btn(4)) _init()

Muisinvoer

Hoewel het niet officieel wordt ondersteund, kun je muisinvoer gebruiken in je games:

function _update60()
  x = stat(32)
  y = stat(33)
  
  if (x>0 and x<=128 and
      y>0 and y<=128) 
  then
     
    -- left button
    if (band(stat(34),1)==1) then
      ball_x=x
      ball_y=y
    end
  end
    
  -- right button
  if (band(stat(34),2)==2) then
    ball_c+=1
    ball_c%=16
  end
  
  -- middle button
  if (band(stat(34),4)==4) then
    ball_r+=1
    ball_r%=64
  end
end

function _init()
  ball_x=63
  ball_y=63
  ball_c=10
  ball_r=1
end

function _draw()
  cls()
  print(stat(34),1,1)
  circ(ball_x,ball_y,ball_r,ball_c)
  pset(x,y,7) -- white
end

Spelmodi

Als u een titelscherm of een eindspelscherm wilt, kunt u overwegen een modusschakelmechanisme in te stellen:

function _init()
  mode = 1
end

function _update()
  if (mode == 1) then
    if (btnp(5)) mode = 2
  elseif (mode == 2) then
    if (btnp(5)) mode = 3
  end
end

function _draw()
  cls()
  if (mode == 1) then
    title()
  elseif (mode == 2) then
    print("press 'x' to win")
  else
    end_screen()
  end 
end

function title()
  print("press 'x' to start game")
end

function end_screen()
  print("a winner is you")
end


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow