Page 1 sur 3

Pong en Lua

Message non luPosté: 08 Sep 2017, 20:11
de Ti64CLi++
Bonsoir,
Je me remets au Lua et pour cela, je me suis dit que faire un pong pourrait etre un bonne entrainement. Pour l'instant, j'ai juste commence la gestion des raquettes, et j'ai deja un probleme, je poste donc le code avec l'espoir d'etre rapidement aide.
Voici mon code:
Code: Tout sélectionner
screen = platform.window
ww, wh = screen:width(), screen:height()

Pad = class()

function Pad:init(x,y) --rajouterai l pour la taille de la raquette plus tard
    self.y = y
    self.x = x
    self.score = 0
    --self.length = l
end

function Pad:move(dir)
    if self.y < wh - 41 and self.y > 1 then
        self.y = self.y + dir
    end
end

function Pad:paint(gc)
    gc:setColorRGB(255, 255, 255)
    gc:fillRect(self.x, self.y, 6, 40)
end

player1 = Pad(5, wh / 2 - 20)

function on.paint(gc)
    gc:setColorRGB(0, 0, 0)
    gc:fillRect(0, 0, ww, wh)
end

Et c'est la que je bloque maintenant, je sais que j'ai su faire mais trou noir.
Mon but serait maintenant d'afficher les raquettes et de les faire bouger.
Donc je me suis dis je rajoute du code pour gerer les touches up et down (pour l'instant on ne va gerer que la premiere raquette):
Code: Tout sélectionner
function on.arrowUp()
    player1.move(-2)
    screen:invalidate()
end

function on.arrowDown()
    player1.move(2)
    screen:invalidate()
end


Et bien sur ca ne rafraichit pas l'ecran et n'affiche pas les raquettes, et je ne peux pas les faire bouger.
Comment je fais pour reactualiser l'ecran, et appeller la fonction Pad:paint(gc), sans l'appeller explicitement? J'ajoute un Pad:invalidate() dans le Pad:move? Ca se fait?
Voila si quelqu'un pouvait m'aider je lui en serais reconnaissant :)
Merci d'avance

Re: Pong en Lua

Message non luPosté: 08 Sep 2017, 20:14
de Adriweb
Il y a très probablement erreur dans les events qui gèrent les fleches, en effet pour appeler une méthode (ici, la méthode Pad:move), il faut utiliser les ":" sur l'instance, et non pas "."
Donc player1.move(-2) devient player1:move(-2). Pour info, techniquement, les ":" ca passe l'instance en tant que premier argument implicite. C'est en fait exactement égal à player1.move(player1, -2)

Bref sinon pour le rafraîchissement ça devrait être bon.

Re: Pong en Lua

Message non luPosté: 08 Sep 2017, 20:18
de Ti64CLi++
ah ok, dans mon code il ne faut pas que j'utilise player1. pour les fonctions de la classe.
Merci Adriweb je test ca et je te dis :)

Re: Pong en Lua

Message non luPosté: 08 Sep 2017, 20:25
de Ti64CLi++
Ca ne marche toujours pas. Quand je lance le script, il m'affiche juste un fond noir voulu, mais pas de raquettes, meme quand j'appuie sur les fleches. Il faut que je rajoute un Pad:invalidate() dans la fonction Pad:move() peut etre non?

Re: Pong en Lua

Message non luPosté: 08 Sep 2017, 20:35
de Adriweb
Non, invalidate c'est une methode de platform.window :P

1) tu as une faute dans le Pad:paint, c'est "gc:fillRect(self.x, self.y, 6, 40)" que tu as voulu mettre.
2) Ca ne s'affichait pas parce que tu n'appelle jamais le :paint(gc) de Pad. Donc bref, par exemple, player1:paint(gc) à la fin de ton on.paint(gc).

du coup la ça fonctionne (y compris les fleches)

Re: Pong en Lua

Message non luPosté: 08 Sep 2017, 20:40
de Ti64CLi++
Ah il faut obligatoirement l'appeller explicitement !!! Merci
Adriweb a écrit:1) tu as une faute dans le Pad:paint, c'est "gc:fillRect(self.x, self.y, 6, 40)" que tu as voulu mettre.

Ah oui en effet je corrige.

Je retest tout ca et je te redit
Merci encore

Re: Pong en Lua

Message non luPosté: 08 Sep 2017, 20:43
de Ti64CLi++
Ok, alors le deplacement marche a peu pres comme il faut, sauf que si je descend tout en bas, il se bloque, je ne peux plus le remonter :(
Pareil quand je vais tout en haut :(

Re: Pong en Lua

Message non luPosté: 08 Sep 2017, 20:50
de Ti64CLi++
Ok alors j'ai resolu le probleme, il suffit de modifier la ligne if self.y < wh - 41 and self.y > 1 then en if (dir > 0 and self.y < wh - 41) or (dir < 0 and self.y > 1) then
Merci Adriweb

Re: Pong en Lua

Message non luPosté: 08 Sep 2017, 21:02
de Ti64CLi++
Et est-il possible de rappeller la fonction Pad:init() dans une autre fonction du genre Pad:addPoint() pour remettre les variables a leur valeur de depart ou alors il faut que je fasses ca manuellement avec des self.x = 0 etc?

Re: Pong en Lua

Message non luPosté: 08 Sep 2017, 21:03
de Adriweb
c'est une fonction (méthode, bref) comme les autres, donc oui, du peux :) player1:init() par exemple.