|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 11 ![]() |
Bonjour,
Pour me faire la main, j'essaie (comme beaucoup, je pense) de faire un petit jeu basé sur un niveau de S Mario Bros. J'ai fait une map en tile mapping, et rajouter un sprite de Mario. Avant de passer à l'étape de l'animation, j'aimerai que la vue soit centré sur Mario (qu'elle le suive quand il se déplace). Ca fait plusieurs heures que j'essaie des trucs différents, mais rien à faire, Mario se déplace tout seul. Je pense qu'il y a un problème dans la récupération de la position de mario, ou de sa transmission à la vue. Je précise que j'utilise la SFML; j'ai volontairement mis ce sujet dans le forum C++ général, car je suis débutant en général, et mon problème ne se situe pas forcément dans l'utilisation de la SFML. Quoi qu'il en soit, voici mon code : Mario.cpp Code :
Mario.hpp Code :
main.cpp Code :
Je ne me suis pas encore penché sur l'aspect poo (je pense nottement à faire une classe Map), je veux d'abord faire bouger cette vue en même temps que mario. Merci d'avance ! |
||||||
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() ![]() Inscription : décembre 2008 Messages : 490 ![]() |
J'ai l'impression que tes attributs _X et _Y font doublon avec les coordonnées déjà intégrées à l'objet sf::Sprite mario. Ces dernières doivent a priori évoluer correctement si SFML fait son boulot, mais _X et _Y ne sont pas mises à jour... Donc la caméra se base sur un couple de coordonnées qui n'évoluent pas.
GetX() devrait plutôt retourner une référence sur mario.getX(), ou équivalent, idem pour GetY(). _X et _Y sont donc à supprimer. Mieux : Mario devrait hériter de sf::Sprite, ce qui semblerait logique en terme de POO : Mario EST un sprite. |
|
|
00
|
|
|
#3 | |||
![]() ![]() ![]() ![]() Alexandre LaurentIngénieur développement logiciels Inscription : mai 2008 Messages : 10 465 ![]() |
Bonjour,
Citation:
Point de vue POO encore, une classe Map et une classe Camera sont un avantage aussi. Code :
__________________
Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi ![]() La rubrique a aussi un blog ! Ma page sur DVP Mon Portfolio Qui connaît l'erreur, connaît la solution. |
|||
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 11 ![]() |
Dans un premier temps, j'ai réglé le problème en actualisant les coordonnés de _X et _Y de mario dans ma boucle (donc déjà, merci pour votre aide
). Ensuite, je ne suis pas vraiment au point avec la notion d'héritage (je n'ai pas encore le réflexe, je ne vois pas toujours précisément ce que ça peut m'apporter), et je n'ai carrément aucune idée de ce qu'est l'agrégation. Le but du jeu étant non pas de faire un vrai jeu, mais bien d'apprendre à programmer tout en ayant un minimum de résultat, je vais de ce pas aller me mettre au point dans les cours. Faire une classe map et une classe camera, j'y avait déjà pensé, mais chaque chose en son temps, sinon j'ai trop de chose à gérer en même temps : une fois que j'ai vu comment ça marche niveau algos, je peux optimiser tout ça. Au niveau de la vue, il y a un autre problème que je n'arrive pas à régler, c'est d'empêcher la vue de "sortir" de l'écran, d'arriver à la bloquer quand elle arrive sur le bord. Je pense qu'il faut un truc du genre "si la vue touche le bord de l'image, elle doit se décentrer de Mario", ou bien "si mario dépasse tel endroit en abcisse, la vue se décentre", mais j'ai un peu de mal à mettre ça en place, surtout que beaucoup de tutos et cours sur la 2d sont avec la SDL en C(ce que je ne connais pas). En tous cas, je vous remercie ; en plus de m'aider à résoudre mon problème, vous me donner des pistes plus pédagogiques qui m'aident à mettre le cours en pratique. Merci! |
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() ![]() Inscription : décembre 2008 Messages : 490 ![]() |
En voyant sa classe, on peut dire que Mario est un type de Sprite, muni en plus d'une vitesse et d'une image propre, donc pourquoi ne pas en hériter ?
Je ne connais pas SFML, mais je vois que sf::Sprite::~Sprite() n'est pas virtuel, donc je me rends compte qu'il n'est pas prévu qu'on en hérite. Mais je me demande naïvement pourquoi. |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() ![]() Alexandre LaurentIngénieur développement logiciels Inscription : mai 2008 Messages : 10 465 ![]() |
Même si c'est pour apprendre autant chercher à tirer sur le langage plutot que se résigner à faire au plus simple (ou au plus C). Donc je dirai, go pour les classes à go go (enfin Map et Camera).
(Ainsi que d'utiliser le C++11 aussi Maintenant, l'aggrégation, c'est le nom technique, pour juste dire que Mario n'hérite pas de sf::Sprite mais possède une instance de sf::Sprite, comme vous l'avez fait. Pourquoi c'est mieux, car l'héritage bloquerai le changement de l'API de vue (SFML), d'une. De deux, car Mario, c'est un sprite, oui, mais ça pourrait être une animation, ou encore une vidéo, ou je ne sais pas quoi d'autre. L'héritage, dans la théorie de responsabilité unique et autre ne servirai qu'à étendre les fonctionnalité des Sprite au niveau de la vue (par exemple : ZoomableSprite) (et non ajouter des fonctionnalités lié aux Acteurs du jeu).
__________________
Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi ![]() La rubrique a aussi un blog ! Ma page sur DVP Mon Portfolio Qui connaît l'erreur, connaît la solution. |
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 11 ![]() |
Je me suis un peu embrouillé avec l'héritage, finalement j'ai laissé comme c'était. Je suis ravi d'apprendre que c'est mieux
Sinon je suis d'accord pour les classes, je voulais juste vérifier mes algos avant, pour éviter d'y rajouter des "erreurs de POO". Par contre, j'ai un autre problème sur un projet de la même ambition. C'est un petit jeu de shoot du genre Space Invaders, toujours avec la SFML. J'ai mis en pratiques quelques petites choses que j'ai apprises, mais je me heurte à un problème plus compliqué (et google ne peut pas grand chose pour moi) : Comment faire pour tirer? C'est ennuyeux de ne pas savoir tirer pour faire un jeu de shoot. ne sachant pas trop comment m'y prendre, j'ai commencé à implémenter une classe Projectile de la même manière qu'un personnage qui se déplace depuis un point donné, mais ça me paraît un peu limite (et en plus jusqu'à présent ça marche pô J'ai lu qu'il faudrait faire une classe héritée de sf:: Drawable, mais je n'en sais pas plus (du coup je ne suis pas plus avancé). Ou bien faut il que je me penche sur les animations de sprites ? Merci à vous |
|
|
00
|
|
|
#8 |
![]() ![]() ![]() ![]() Alexandre LaurentIngénieur développement logiciels Inscription : mai 2008 Messages : 10 465 ![]() |
Une classe Projectile me semble une bonne idée. Après, il faudra peut être aussi une classe World, qui gère la mise à jour des éléments du jeu (méthode update()). Je vous conseille de créer une nouvelle discussion, pour ce problème en particulier (et non surchargé une discussion de plusieurs sujets distincts)
__________________
Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi ![]() La rubrique a aussi un blog ! Ma page sur DVP Mon Portfolio Qui connaît l'erreur, connaît la solution. |
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 11 ![]() |
Ok. Merci à vous !
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com