| |
![]() |
|
|
||||||||||||||||||||||||||||
| |
![]() |
![]() |
|
||||||||||||||||||||||||||||
| |
|
||||||||||||||||||||||||||||||
| |
|
||||||||||||||||||||||||||||||
| |
![]() |
![]() |
![]() |
![]() |
|
|
|
||||||||||||||||||||||||
| |
![]() |
|
|||||||||||||||||||||||||||||
| |
|
||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
|
||||||||||||||||||||
| |
|
||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
![]() |
|
|
||||||||||||||||||||||
| |
|
|
|
||||||||||||||||||||||||||||
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nouveau Shoot Them Up de Sojiro, issu du moteur utilisant la librairie SDL qu'il avait réalisé il y a quelques années.
Le jeu vous place dans la peau d'une balle bleue qui peut se déplacer sur l'écran, avec les touches ZQSD. Elle peut tirer des étoiles...
Un ancien mythe raconte que la Valkyrie des éléments Freyja se sacrifia après la grande bataille divine pour sauvegarder notre planète du Ragnarök...
![]() |
|
|||
|
Bonsoir,
Ça fait maintenant 2-3 jours que j'ai commencé à utiliser gosu, le tutoriel à l'origine du post est vraiment très instructif ! Si j'ai envie de créer des jeux vidéo, c'est parce que j'ai un projet de mmorpg qui m'emballe particulièrement. Pour faire bref, c'est un mmo en 3D isométrique dans le même style que Dofus. Comme je débute et que je ne sais pas trop où poser la question/me renseigner (j'ai déjà chercher sur google, mais je vois pas où elle est la communauté) Pour les questions : - Comment faire pour faire une action lorsqu'on clique sur un image ? (avec la gestion de la transparence pour les gif et les png). - Lorsque je crée mes losange pour réaliser un effet de 3d isométrique, comment savoir dans quel losange je suis lorsque un utilisateur clique dessus ? (j'ai chercher la formule mathématique des heures sans succès) |
|
||||
|
Hmmm... pas facile tout ça ! Ce n'est pas spécialement spécifique à Gosu d'ailleurs, mais bien à toutes les librairies 2D !
J'aurais néanmoins quelques solutions. Il existe des algorithmes pour calculer la position d'un tile hexagonal ou losange, qu'on peut assez facilement trouver sur google. Pour savoir si on clique sur une image, il y aurait éventuellement un simple calcul de coordonnées à faire, mais le problème, c'est que ce picking ne tiendrait pas compte de la profondeur d'affichage, en ce sens que plusieurs objets peuvent se trouver aux mêmes coordonnées... Donc : - soit tu fais une recherche sur tes éléments graphiques pour savoir lesquels sont sous le curseur de la souris, puis tu sélectionnes celui dont le Z est le plus grand, mais ceci risque de poser des soucis si tes images ne sont pas pleines - soit tu fais un color keying via le color buffer en OpenGL, ce qui me semble être le plus simple, et de loin. Tu peux très bien calculer la position d'un tile de la même manière. C'est très simple en fait : - tu attribues une couleur pour chaque objet - tu dessines ton image avec cette couleur (via opengl ou fichier spécialement dédié, genre chaque sprite en version couleur unique + version propre) - tu lis le buffer opengl : Code:
pixel = GL.ReadPixels(self.mouse_x, self.height() - self.mouse_y, 1, 1, GL::RGB, GL::UNSIGNED_BYTE) GL.Clear(GL::COLOR_BUFFER_BIT)
__________________
|
|
|||
|
Merci de ta réponse si rapide !
![]() Pour les algos, j'ai aussi cherché sur google, mais je ne sais pas quel mot clé utilisé ^^' Pour ce qui est de la solution des images, j'ai compris le principe, seulement, je n'ai encore jamais fait de l'openGL. Est-ce que tu pourrais me donner des ressources pour apprendre à l'utiliser (avec ruby) parce que je ne comprend rien aux tutos prévus à la base pour c/c++ ^^' Pour déjà tester ta solution (qui me semble vraiment génial), est-ce que tu pourrais me dire comment faire le "color keying" sur mes images ? |
|
||||
|
http://wiki.jeuweb.net/tutoprog/3d_i...es_hexagonales
surement le plus clair que j'ai jamais lu à ce sujet ![]() Le truc, c'est qu'il existe très peu de bons liens pour Ruby OpenGL. La plupart des fonctions des versions C existent en Ruby et s'utilisent pratiquement de la même manière. Le fichier openglIntegration.rb dans les samples Gosu est un bon exemple. http://gosu.googlecode.com/svn/trunk...Integration.rb Bien sûr, il te faudra installer ruby-opengl pour pouvoir réaliser ce qui suit. En fait, concrètement, on ne peut pas le faire directement sur les images (contrairement à SDL, par exemple). On est obligés de ruser, et de passer par l'écran-même, ce qui revient à dessiner en deux fois, ce qui a priori ne pose pas de problème de performances dans un moteur 100% 3D que j'ai codé avec un pote. Ce que tu dois faire, c'est de te créer deux fichiers pour tes images : - 1 qui sera celui avec les bons pixels, représentant par exemple un personnage - 1 qui sera celui avec une couleur pleine par-dessus les pixels de ton image Quand tu crées un sprite, tu charges les deux comme des Gosu::Image. Dans un premier temps, tu ne dessines que tes images à couleur pleine, puis tu lis le pixel survolé dans le tampon couleur par ta souris via : Code:
pixel = GL.ReadPixels(self.mouse_x, self.height() - self.mouse_y, 1, 1, GL::RGB, GL::UNSIGNED_BYTE) GL.Clear(GL::COLOR_BUFFER_BIT) Ensuite, via la dernière ligne, on vide le buffer. On peut alors dessiner normalement la scène via les images normales. Cette étape peut être facultative en soi, puisqu'en principe les images nouvelles écraseront leur "copie couleur", à essayer et voir si ça fait gagner de la perf. A proscrire d'office je suppose si tu utilises des transparences partielles par contre (effet de feuillage laissant ressortir un vert colorkey monstrueux derrière...) sauf à bien sûr ne pas inclure les transparences partielles dans la zone cliquable, et donc dans l'image faisant office de colokey. Maintenant que tu as le code couleur, tu n'as plus qu'à en déduire l'image survolée, puisque tu auras pris le soin bien sûr d'ajouter ce paramètre dans le constructeur de ton sprite, dans une classe comme celle-ci, par exemple : Code:
class Sprite
def initialize(window, filename, colorkey, x = 0, y = 0, z = 0)
@gfx = Gosu::Image.new(window, filename + ".png", true)
@gfx_color = Gosu::Image.new(window, filename + "_color.png", true)
@colorkey = colorkey
@x, @y, @z = x, y, z
end
def draw
@gfx.draw(@x, @y, @z)
end
def drawColor
@gfx_color(@x, @y, @z)
end
def has_colorkey?(color)
@colorkey == color
end
end
Code:
@sprites.each {|sprite| selected = sprite if sprite.has_colorkey?(@pixel)}
Note au passage que ce procédé fonctionne parfaitement sur de la full 3D Nous utilisons ce procédé notamment pour notre éditeur de niveau, où les objets 3D sont d'abord dessinés en mode couleur, puis dessinés en mode texture.
__________________
|
|
|||
|
Merci encore pour ta rapidité !
![]() J'ai tester ta solution OpenGL et elle marche à merveille. En ce qui concerne la conception et l'emplacement des tiles, ce n'est pas un soucis. (c'était une formule style "mouse_x/mouse_y = tile 5/6") J'ai déjà testé le fichier "OpenGLIntegration" mais je ne comprend pas les fonctions OpenGL, j'aurais aimé de la doc que je puisse aisément comprendre ( je ne connais pas du tout la syntaxe C même si ça me tente de m'y mettre un jour ). Je ne sais pas où j'avais la tête mais pour donner une couleur à l'image, je n'ai qu'à utiliser une fonction d'ImageMagick (colorize) et charger via la variable d'ImageMagick. Ce qui m'inquiette, ce sont les perfs. Les graphismes seront similaire à Dofus, il y aura beaucoup d'image différentes à afficher, doubler les images pour savoir si on est sur une zone cliquable, ça ne consommera pas trop ? |
|
||||
|
Si tu utilises Rmagick c'est en effet bien plus simple ! J'avais laissé tomber cette librairie du fait que "compiler" un "exécutable" via rubyscript2exe posait beaucoup de soucis avec.
Mais si tu comptes l'utiliser, tu peux en effet coloriser une image et en garder une référence. C'est exactement ce que je faisais quand je bossais avec, et je n'avais aucune perte de performances. Créer ces images est un pré-traitement, avant même que ta scène ne s'affiche. Et garder deux fois plus de références aux images affichées, ça reste très peu par rapport à ce qu'un PC peut endurer. Concrètement, Rmagick ne te servira qu'à ça, en revanche. A voir si utiliser cette lourde librairie est vraiment nécessaire, sauf si bien entendu tu en utilises d'autres méthodes. Par ce que créer un doublon coloré d'une image, sous Photoshop, c'est quand même ultra rapide : - tu choisis une couleur - tu control + clic sur ton calque, ce qui te sélectionneras les pixels non vides - tu remplis - tu enregistres avec même nom + "_color" par exemple tu peux même automatiser tout ça via une macro, ce qui est super facile à concevoir sous Photoshop. Au passage, pour quelqu'un qui affirme ne pas comprendre ni connaitre OpenGL, je n'en reviens pas que tu sois arrivé à créer cette méthode de lecture de pixels aussi rapidement
__________________
|
![]() |
| Outils de la discussion | |
| Modes d'affichage | |
|
|
LinkBacks (?)
LinkBack to this Thread: http://forum.relite.org/tutoriaux-logiciels-de-creation/3393-ruby-gosu-cours-complet.html
|
||||
| Envoyé par | For | Type | Date | |
| Forum Du Référencement a Marseille • Ruby fait tout ! | This thread | Refback | 06/05/2010 20h27 | |
| Forum Du Référencement a Marseille • Ruby fait tout ! | This thread | Refback | 03/02/2010 12h58 | |
| [ruby] librairie graphique gosu | This thread | Refback | 26/01/2010 10h56 | |
Discussions similaires
|
||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| [Cours]Ruby/RGSS | Drakhaine | Astuces programmation | 11 | 10/06/2007 21h49 |
| [Ruby] Hackety Hack: apprenez le ruby sans effort | youpi | Astuces programmation | 24 | 09/05/2007 05h05 |
| [Recrutement] Projet kh en cours | ichigo95 | Petites annonces | 25 | 15/10/2006 15h42 |
| [Ruby Gosu/OpenGL] Moteur 2.5D | Akres | Vos projets de jeux vidéo (WIP) | 0 | 02/01/1970 05h33 |
| [Cours]Ruby/RGSS | Godof | Realisations | 3 | 01/01/1970 23h22 |