Un space invaders avec Opal.rb - partie 12
On commence aujourd’hui à ajouter les tirs du joueur. Le code que je vous propose est un brouillon, qu’il faudra améliorer successivement.
D’abord dans la classe Game, j’ajoute un champ @fires:
class Game
def initialize
@canvas = SpaceCanvas.new
@player = Player.new
@enemies = Enemies.new(@canvas.width)
@fires = []
endOn déclenchera la méthode fire lors d’un appui sur la barre d’espace (32):
def init_keyboard
%x(
window.addEventListener("keydown",
function(e) {
if(e.keyCode == 32) { #{fire} }
if(e.keyCode == 37) { #{@player.move_left} }
if(e.keyCode == 39) { #{@player.move_right} }
},
false);
)
endVoici la méthode fire, qui ajoute simplement un objet à la collection:
def fire
@fires << Fire.new(@player.x, @player.y)
endEt maintenant une méthode qui met à jour les tirs du joueur:
def update_fires
@fires.each do |fire|
fire.update_position
@canvas.draw_fire(fire)
end
@fires.select! {|fire| fire.y >= 0 }
endLa dernière ligne de cette méthode supprime de la collection les tirs qui ne sont plus visibles à l’écran.
Pour finir, voici la classe Fire:
class Fire
WIDTH = 4
DELTA = 5
attr_reader :x, :y
def initialize(x, y)
@x = x
@y = y
end
def w; WIDTH; end
def h; WIDTH; end
def color; "white"; end
def update_position
@y -= DELTA
end
endTout ce code pose un certain nombre de problèmes sur lesquels je reviendrais dans les prochains jours. Demain je pense que je mettrais le code sur Github.
À demain.
/ / / / / / / / / /