Difference between revisions of "2D Space Shooter Part 4: Player"

From GiderosMobile
m (Text replacement - "</source" to "</syntaxhighlight")
Line 41: Line 41:
 
self:setPosition(x,y)
 
self:setPosition(x,y)
 
end
 
end
</source>
+
</syntaxhighlight>
  
 
Notice how we explicitly call the Ship.destroy() function from our subclass. Also note another use of the <> et >< gideros operators when clamping the player ship position on screen.
 
Notice how we explicitly call the Ship.destroy() function from our subclass. Also note another use of the <> et >< gideros operators when clamping the player ship position on screen.
Line 47: Line 47:
 
== Using our controllable ship ==
 
== Using our controllable ship ==
  
This is were OOP power shines. The only thing you need to do to make the ship you added to main.lua controllable is just to instanciate a PlayerShip instead of a generic Ship. In main.lua, change <source lang="lua">local player=Ship.new()</source> into <source lang="lua">local player=PlayerShip.new()</source> and you are done!
+
This is were OOP power shines. The only thing you need to do to make the ship you added to main.lua controllable is just to instanciate a PlayerShip instead of a generic Ship. In main.lua, change <source lang="lua">local player=Ship.new()</syntaxhighlight> into <source lang="lua">local player=PlayerShip.new()</syntaxhighlight> and you are done!
  
  

Revision as of 17:59, 12 July 2023

It is time to make our ship controllable. Since only the player's ship will be controllable, lets make a subclass of our generic Ship to handle that. We will call it 'PlayerShip'.

Go ahead and create a new file named 'player.lua'. This new file will depend on the Ship class, so right click on the file name in gideros studio and access 'Code dependencies'. From there tell Gideros that player.lua will depend on ships.lua.

Player control

The code if this file is rather simple: we register mouse events and react upon them.

<source lang="lua"> PlayerShip=Core.class(Ship)

function PlayerShip:init() self:addEventListener(Event.MOUSE_DOWN,self.onMouseDown,self) self:addEventListener(Event.MOUSE_UP,self.onMouseUp,self) self:addEventListener(Event.MOUSE_MOVE,self.onMouseMove,self) self:addEventListener(Event.MOUSE_HOVER,self.onMouseMove,self) end

function PlayerShip:destroy() self:removeEventListener(Event.MOUSE_DOWN,self.onMouseDown,self) self:removeEventListener(Event.MOUSE_UP,self.onMouseUp,self) self:removeEventListener(Event.MOUSE_MOVE,self.onMouseMove,self) self:removeEventListener(Event.MOUSE_HOVER,self.onMouseMove,self) -- Call the inherited destructor Ship.destroy(self) end

function PlayerShip:onMouseDown(event) -- Start firing self.fire=true end

function PlayerShip:onMouseUp(event) -- Stop firing self.fire=false end

function PlayerShip:onMouseMove(event) -- Clamp the position to something in the screen local x=(event.x<>(SCR_LEFT+64))><(SCR_RIGHT-64) local y=(event.y<>(SCR_TOP+64))><(SCR_BOTTOM-64) self:setPosition(x,y) end </syntaxhighlight>

Notice how we explicitly call the Ship.destroy() function from our subclass. Also note another use of the <> et >< gideros operators when clamping the player ship position on screen.

Using our controllable ship

This is were OOP power shines. The only thing you need to do to make the ship you added to main.lua controllable is just to instanciate a PlayerShip instead of a generic Ship. In main.lua, change <source lang="lua">local player=Ship.new()</syntaxhighlight> into <source lang="lua">local player=PlayerShip.new()</syntaxhighlight> and you are done!


2D Space Shooter Part 5: Firing