Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Des procédures pour la 2D | |
| | |
Auteur | Message |
---|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Des procédures pour la 2D Jeu 21 Mai 2015 - 12:12 | |
| Serait-il possible d'avoir les 2 mots-clés suivant ?
résultat%=SPRITE_SHOW(N) et résultat%=SPRITE_HIDE(N), ce qui permettrait de controler un clic sur le SCENE2D à la position du SPRITE (vu que on_click ne fonctionne pas sur un sprite):
Bien sur, il y a la possibilité SPRITE_DELETE, mais...........
A+
Dernière édition par Jean Claude le Ven 12 Juin 2015 - 12:03, édité 1 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des procédures pour la 2D Jeu 21 Mai 2015 - 13:39 | |
| Hum désolé Jean-Claude mais là je n'ai pas bien suivi le rapport entre résultat%=SPRITE_SHOW(N) et résultat%=SPRITE_HIDE(N) et le controle du clic sur un sprite. Si l'objectif est de savoir si on a cliquer sur un sprite, ne serait-ce pas plus simple de demander une commande telle que: SPRITE_CLICK_ON N et SPRITE_CLICK_OFF N pour activer ou désactiver la detection d'un click sur un sprite ? avec bien sûr un ON_SPRITE_CLICK N,label et un SPRITE_CLICK_ALL_OFF.
Après, je n'ai peut être pas bien compris l'objectif et les commandes: résultat%=SPRITE_SHOW(N) et résultat%=SPRITE_HIDE(N) peuvent être utiles à d'autres fins. Je n'ai juste pas bien compris le lien avec la gestion du clic | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Des procédures pour la 2D Jeu 21 Mai 2015 - 14:29 | |
| Je me suis mal expliqué, j'ai rédigé à la va vite car j'étais attendu à la cuisine. Prenons l'exemple d'un SPRITE qui représente un soldat: Si le soldat est tué, soit tu le DELETE, soit tu le HIDE. Dans le cas de SPRITE_HIDE la position du soldat (son sprite) est toujours existante. Or, comme on ne peut pas cliquer sur un SPRITE avec un ON_CLIK, j'ai été obligé de faire un repérage du click sur le SCENE2D et de comparer si la souris se trouve à l'emplacement d'un SPRITE (en l’occurrence mon soldat) avec SPRITE_X_POSITION(N) et SPRITE_Y_POSITION(N) + les position x et y de la souris. Si la souris est à l'emplacement d'un SPRITE et que celui-ci est HIDE, le programme ne sait pas que le soldat est mort. Bien sur, si le soldat est mort, en principe il faut utiliser SPRITE_DELETE, mais ce n'est pas forcément un soldat sous le SRITE, et on peut avoir besoin de le "réactiver". Avec SPRITE_HIDE(N) on pourrait écrire: if SPRITE_HIDE(N)=1 then return (ou exit_sub, etc....) Je te rejoins sur le fait qu'un ON_CLICK dédié au SPRITE serait une bonne solution, mais l'un n'empêche pas l'autre. Et je suppose que pour Jack coder SPRITE_HIDE(N) et SPRITE_SHOW(N) doit être plus simple que ON_CLICK_SPRITE N,label Pour le moment, j'ai contourné le problème en utilisant une variable, etat_soldat(n%), qui me retourne -1 si le soldat est mort...... Quand j'aurais terminé mon programme, promis, je vous avertirai. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des procédures pour la 2D Jeu 21 Mai 2015 - 15:11 | |
| Merci pour ton explication Jean-Claude, je comprends mieux ta demande | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 21 Mai 2015 - 19:57 | |
| @ Jean claude, Si je suis ton souci, il te faut une procédure de création des sprites au sprite par sprite dans laquelle tu transmets la position de chaque sprite et que chaque sprite ait un numéro prédéfini et fixe. ex : dim SP_soldat% : no%=no%+1 : SP_soldat% =no% de cette facon, le soldat, même si il est supprimé par Sprite delete, garde le même numéro ( le sprite est détruit mais le numéro reste dans la variable et même si tu ajoutes des objets après, le numéro est réservé pour le soldat) et il te suffit de recréer le sprite à partir de ce numéro et de sa position de départ lorsqu' il réssucite... c' est pour cela que depuis quelques temps j' ai pris le pli de numéroter mes objets avec des variables et ce dès la déclaration de ceux ci. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Des procédures pour la 2D Jeu 21 Mai 2015 - 22:41 | |
| Oui Ygeronimi,
C'est exactement ce que je fais "no%=no%+1:Soldat(n%)=no%:sprite no%". Tu devrais te rappeler que je suis un adepte des objets nommés par une variable.... Le problème c'est que Soldat(n%) et no% n'ont pas forcément la même valeur et çà complique le codage. Mais çà n'empêche pas que si j'écris obj%=Soldat(n%), c'est plus simple de savoir si Soldat(n%), donc obj% est visible ou pas grâce à "IF SPRITE_SHOW(Soldat(n%))=1 then c'est qu'il est vivant" et donc çà simplifie la suite du codage. Sans ce mot-clé on est obligé d'avoir une variable qui vérifie si le SPRITE est SHOW (vivant) ou HIDE (mort). Du genre: "etat_soldat(n%)=0 pour HIDE et 1 pour SHOW".
N'oubli pas que ON_CLICK ne fonctionne pas sur un SPRITE, donc tu n'as pas le choix que de comparer sa position par rapport au clic-souris sur le SCENE2D pour retrouver son numéro d'objet et ensuite il faut retrouver la variable désignant le SPRITE qui correspond au numéro d'objet.
Ce que je demande c'est du confort et moins de prise de tête au codage.....
A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des procédures pour la 2D Jeu 21 Mai 2015 - 23:31 | |
| Je suis d'accord avec toi, Jean-Claude. D'abord, une simplification est toujours la bien-venue.
Mais surtout, il y a un problème de cohérence dans l'esprit même de Panoramic. Tous les objets sont gérés par un numéro qui les identifie, toutes les commandes sur les objets utilisent ce numéro, ainsi que toutes les fonctions touchant les objets.
Or, les sprites sont en apparence très similaires. Ce sont des objets de l'univers 2D. Il y a des commandes qui agissent sur les sprites, et elles utilisent le numéro de sprite comme si c'était un numéro d'objet. Il serait tout à fait logique de trouver des commandes et fonctions pour les sprites, similaires à celles des objets, ainsi que des évènements pour les sprites.
Je dirais même plus. Pour certains objets, il y a des évènements spécifiques (ON_CLISE, ON_ACTIVATE, pour ne nommer que ceux-là). Outre le très attendu ON_SPRITE_CLICK, il serait très utile d'avoir un ON_SPRITE_COLLISION avecdes variables système comme NUMBER_SPRITE_CLICK, NUMBER_SPRITE_COLLIDING (sprite en mouvement entrant en collision) et NUMBER_SPRITEçCOLLIDED (sprite touché par le sprite indiqué par NUMBER_SPRITE_COLLIDING).
Je pense que Panoramic gagnerait en avançant sur le chemin de la symétrie de traitement entre objets et sprites. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des procédures pour la 2D Ven 22 Mai 2015 - 1:06 | |
| Totallement d'accord et en plus je crois que Jack y travaille déjà au moins partiellement. Comme d'habitude, on en demande toujours plus, mais c'est vrai qu'en dehors du boulot que ça représente, c'est totalement logique dans l'esprit de Panoramic et ces fonction ne serait pas qu'un confort. Le scene2D et les sprites sont des éléments très pratiques et pusisants dans Panoramic mais il est certain qu'il manque actuellement des fonctions pour boucler le sujet (comme pour la 3D) PS: Enfin quand je dis boucler le sujet comme je nous connais, je veux dire boucler pour le moment en attendant que nous nous découvrions de nouveaux besoins pour faire de nouvelles choses et pousser Panoramic encore plus loin | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Des procédures pour la 2D Ven 22 Mai 2015 - 7:58 | |
| Merci Klaus pour ton soutient. Je récapitule.
Dans un premier temps resultat=SPRITE_SHOW(N) et/ou resultat=SPRITE_HIDE(N) serait déjà bien. Puis SPRITE_ON_CLICK n,label par la suite
A+ | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 22 Mai 2015 - 9:32 | |
| Tu as tout mon soutien Jean Claude, et avec mon quintal... . | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Des procédures pour la 2D Ven 22 Mai 2015 - 18:22 | |
| Créer les fonctions resultat=SPRITE_SHOW(N) et resultat=SPRITE_HIDE(N) n'est pas bien compliqué, et je les inclus dans la "TODO list".
Par contre, faire un ON_CLICK Sprite, Label est impossible dans l'état actuel. En effet, l'image affichée par un SCENE2D est créée à partir du fond, sur laquelle on superpose les SPRITEs, pour obtenir une image finale, composée d'un ensemble de pixels colorés sans signification. Il n'y a plus de SPRITEs dans l'image finale ! C'est devenu une surface faite de pixels colorés ! C'est comme si vous me demandiez sur la photo d'une maison, de pouvoir cliquer à différents endroits et que le programme vous réponde : c'est le toit, c'est une fenêtre, c'est une porte, ou quand on clique sur la photo d'une voiture, que le programme sache répondre : c'est le rétroviseur, c'est une roue, ... _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 22 Mai 2015 - 18:31 | |
| @ Jack, Tu nous décris une image map..., on prend aussi, on est pas regardant tu sais... Plus sérieusement il faudrait donc que la fonction fasse ce que l' on fait avec la position de la souris sur le scene2d etc... mais en arrière plan au lieu du code dans nôtre programme... Bref, c' est pas très rentable sauf pour l' éclaircissement des sources des programmes. On se contentera des deux autres commandes... ...jusqu' à la prochaine irruption d' idées tordues. Edit: tu peux nous dire la date de la prochaine vs instantanée ?... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des procédures pour la 2D Ven 22 Mai 2015 - 20:39 | |
| OK, mais si tu créé le système de detection de collision, le on_sprite_click pourra s'apparenter à une collision entre le point actif de la souris et le sprite, non ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Des procédures pour la 2D Ven 22 Mai 2015 - 21:33 | |
| Merci Jack,
Ce sera déjà un plus d'avoir resultat=SPRITE_SHOW(N) et resultat=SPRITE_HIDE(N) .
Pour sprite_on_click, je ne voyais pas la complexité du problème...
A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des procédures pour la 2D Ven 22 Mai 2015 - 22:35 | |
| Pour savoir si un sprite est cliqué, il faut faire une petite gymnastique en Panoramic pur. Tout d'abord, quelques éléments de réflexion:
1. un sprite peut être positionné à une coordonnée précise dans le scene2d, en x et y 2. on peut connaître ces coordonnées à tout moment, par des fonctions Panoramic existantes 3. pour autant que je sache, un sprite est créé sous forme d'un carré de 200x200 pixels 4. les dimensions horizontales et/ou verticales d'un sprite peuvent changer par des commandes de type scale 5. ces changements de dimensions se font par un coefficient multiplicateur, et non par l'affectation de valeurs directes
Conséquences: 1. on peut facilement connaître les coordonnées d'un clic dans un scene2d 2. on peut tout aussi facilelement connaître les coordonnées de tous les sprites 3. pour les sprites qui n'ont pas changé de dimension, on peut facilement savoir si l'on a cliqué dessus, en testant si le clic a lieu dans le carré de 200x200 pixels dont le coin en haut à gauche est la position du sprite
Le problème se pose avec les sprites qui ont été redimensionnés. Une seule solution: créer un tableau de valeurs réelles de deux dimensions, mémorisant les dimensions réelles de chaque sprite. Une de ces dimensions est le nombre de sprites et l'autre est 1 (indice 0 pour la hauteur, et 1 pour la largeur). Maintenant, à chaque utilisation d'une des commandes scale sur un sprite, on applique le même coefficient sur la ou les valeurs mémorisées pour les dimensions du sprite concerné. Et alors, lors d'un clic, au lieu de tester, pour chaque sprite, si le clic est dans le carré de 200x200 à partir de la position du sprite, on utilise le rectangle de largeur x hauteur pour le sprite concerné.
Et voilà. Une détection infaillible, qui peut se coder dans une SUB.
Reste le problème de superposition des Sprite, mais ceci est un autre problème et devra être traité différemment.
EDIT
Puisque déjà, Jack regarde ces posts et donne des informations à ce sujet, j'oserais peut-être lui suggérer de gérer, en interne à Panoramic, une table de ce genre pour les dimensions (mais je suis certain que l'information est déjà présente quelque part, car je ne vois pas comment l'image d'un scene2d pourrait être composé à partir de bitmaps dont on ne connaît pas la dimension...). Et alors, lors d'un clic dans un scene2d, Panoramic pourrait, en-dehors du renseignement des variables NUMBER_CLICK et de la mémorisation des valeurs pour MOUSE_X_LEFT_DOWN(n) et MOUSE_Y_LEFT_DOWN(n), faire cette boucle de détection et remplir une variable système NUMBER_CLICK_SPRITE avec le sprite détecté ainsi que la mémorisation des coordonnées de ce clic dans le sprite pour être retournées par des fonctions MOUSE_X_LEFT_DOWN_SPRITE et MOUSE_X_LEFT_DOWN_SPRITE ce qui permettrait de savoir où le sprite a été cliqué. Mais une fois qu'on a NUMBER_CLICK_SPRITE, on peut aisément calculer soi-même ces valeurs par MOUSE_X_LEFT_DOWN(n)-SPRITE_X_POSITION(NUMBER_CLICK_SPRITE) etc. Facile... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 1:03 | |
| D'ailleurs, pour ceux pour qui mes explications ne sont pas claires, voici un jeu de SUBs pour créer les sprites, les dimensionner et les identifier après un clic: - Code:
-
dim sprites(500,1) : ' jusqu'à 500 sprites ,0)=largeur ,1)=hauteur dim nsprite% : ' dernier numéro de sprite créé dim sprite_trouve% : ' numéro du sprite trouvé (ou 0 si non trouvé) dim scene_2d% : ' numéro d'objet du scene2d
scene2d% = 17 : ' juste un exemple scene2d scene_2d% : ' créer le scene2d 2d_target_is scene_2d% : ' assurer du bon ciblage end
sub creer_sprite(x%,y%) nsprite% = nsprite% + 1 : ' passer au numéro de sprite suivant sprite nsprite% : ' créer le sprite sprites%(nsprite%,0) = 200 : ' mémoriser sa largeur sprites%(nsprite%,1) = 200 : ' et sa hauteur sprite_position nsprite%,x%,y% : ' positionner le sprite à l'endroit voulu end_sub
sub redimensionner_sprite_x(n%,c) sprite_x_scale n%,c : ' ajuster la largeur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser end_sub
sub redimensionner_sprite_y(n%,c) sprite_y_scale n%,c : ' ajuster la hauteur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser end_sub
sub redimensionner_sprite_(n%,c) sprite_scale n%,c : ' ajuster largeur et hauteur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser la largeur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser la hauteur end_sub
sub chercher_sprite_selon-clic() dim_local i%, x%, y%, xs%, ys% sprite_trouve% = 0 : ' supposer "non trouvé" if number_click<>scene_2d% then exit : ' on n'a pas cliqué dans le scene2d ? if nsprite%=0 then exit_sub : ' pas de sprites créés ? x% = mouse_x_left_down(scene_2d%) : ' mémoriser la position horizontale du clic y% = mouse_y_left_down(scene_2d%) : ' mémoriser la position verticale du clic for i%=1 to nsprite% xs% = sprite_x_position(i%) : ' mémoriser la position horizontale du sprite i% ys% = sprite_y_position(i%) : ' mémoriser la position verticale dusprite i% if (xs%<x%) : ' le bord gauche du sprite est plus à gauche que l'abscisse du clic ? if (xy%<y%) : ' le bord haut du sprite est plus haute que l'ordonnée du sprite ? if xs%+sprite(i%,0)>=x% : ' le bord droit du sprite est plus à droite que l'abscisse du clic ? if ys%+sprite(i%,1)>=y% : ' le bord bas du sprite est plus en bas que l'ordonnée du clic ? sprite_trouve% = i% : ' alors, on a trouvé exit_sub : ' et on sort end_if : ' fin test sur le bord bas du sprite end_if : ' fin test sur le bord droit du sprite end_if : ' fin test sur le bord haut du sprite end_if : ' fin test sur le bord gauche du sprite next i% : ' fin boucle sur les sprites end_sub
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 4:33 | |
| Hello Klaus Ligne 6 - Code:
-
scene2d% = 17 : ' juste un exemple C’est plutôt - Code:
-
scene_2d% = 17 : ' juste un exemple Ligne 8 - Code:
-
2d_target_is scene_2d% : ' assurer du bon ciblage Not successful command for this kind of OBJECTLigne 35 - Code:
-
sub chercher_sprite_selon-clic() A corriger par - Code:
-
sub chercher_sprite_selon_clic() | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 9:33 | |
| Merci, Papydall ! Voici le code corrigé: - Code:
-
dim sprites(500,1) : ' jusqu'à 500 sprites ,0)=largeur ,1)=hauteur dim nsprite% : ' dernier numéro de sprite créé dim sprite_trouve% : ' numéro du sprite trouvé (ou 0 si non trouvé) dim scene_2d% : ' numéro d'objet du scene2d
scene_2d% = 17 : ' juste un exemple scene2d scene_2d% : ' créer le scene2d sprite_target_is scene_2d% : assurer du bon ciblage end
sub creer_sprite(x%,y%) nsprite% = nsprite% + 1 : ' passer au numéro de sprite suivant sprite nsprite% : ' créer le sprite sprites%(nsprite%,0) = 200 : ' mémoriser sa largeur sprites%(nsprite%,1) = 200 : ' et sa hauteur sprite_position nsprite%,x%,y% : ' positionner le sprite à l'endroit voulu end_sub
sub redimensionner_sprite_x(n%,c) sprite_x_scale n%,c : ' ajuster la largeur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser end_sub
sub redimensionner_sprite_y(n%,c) sprite_y_scale n%,c : ' ajuster la hauteur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser end_sub
sub redimensionner_sprite_(n%,c) sprite_scale n%,c : ' ajuster largeur et hauteur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser la largeur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser la hauteur end_sub
sub chercher_sprite_selon_clic() dim_local i%, x%, y%, xs%, ys% sprite_trouve% = 0 : ' supposer "non trouvé" if number_click<>scene_2d% then exit : ' on n'a pas cliqué dans le scene2d ? if nsprite%=0 then exit_sub : ' pas de sprites créés ? x% = mouse_x_left_down(scene_2d%) : ' mémoriser la position horizontale du clic y% = mouse_y_left_down(scene_2d%) : ' mémoriser la position verticale du clic for i%=1 to nsprite% xs% = sprite_x_position(i%) : ' mémoriser la position horizontale du sprite i% ys% = sprite_y_position(i%) : ' mémoriser la position verticale dusprite i% if (xs%<x%) : ' le bord gauche du sprite est plus à gauche que l'abscisse du clic ? if (xy%<y%) : ' le bord haut du sprite est plus haute que l'ordonnée du sprite ? if xs%+sprite(i%,0)>=x% : ' le bord droit du sprite est plus à droite que l'abscisse du clic ? if ys%+sprite(i%,1)>=y% : ' le bord bas du sprite est plus en bas que l'ordonnée du clic ? sprite_trouve% = i% : ' alors, on a trouvé exit_sub : ' et on sort end_if : ' fin test sur le bord bas du sprite end_if : ' fin test sur le bord droit du sprite end_if : ' fin test sur le bord haut du sprite end_if : ' fin test sur le bord gauche du sprite next i% : ' fin boucle sur les sprites end_sub | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 9:54 | |
| Il te manque un ' ligne 8 pour le commentaire mais bon je pense que tout le monde peut l'ajouter Je renommé: redimensionner_sprite_ en redimensionner_sprite_xy aussi | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 9:57 | |
| Et voici une version qui peut également cacher et montrer un sprite, pour simuler les commandes SPRITE_HIDE et SPRITE_SHOW: - Code:
-
dim sprites(500,2) : ' jusqu'à 500 sprites ,0)=largeur ,1)=hauteur ,2)=visible/invisible dim nsprite% : ' dernier numéro de sprite créé dim sprite_trouve% : ' numéro du sprite trouvé (ou 0 si non trouvé) dim scene_2d% : ' numéro d'objet du scene2d
scene_2d% = 17 : ' juste un exemple scene2d scene_2d% : ' créer le scene2d sprite_target_is scene_2d% : assurer du bon ciblage end
sub creer_sprite(x%,y%) nsprite% = nsprite% + 1 : ' passer au numéro de sprite suivant sprite nsprite% : ' créer le sprite sprites(nsprite%,0) = 200 : ' mémoriser sa largeur sprites(nsprite%,1) = 200 : ' et sa hauteur sprites(nsprite%,2) = 1 : ' marquer "visible" sprite_position nsprite%,x%,y% : ' positionner le sprite à l'endroit voulu end_sub
sub redimensionner_sprite_x(n%,c) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_x_scale n%,c : ' ajuster la largeur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser end_sub
sub redimensionner_sprite_y(n%,c) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_y_scale n%,c : ' ajuster la hauteur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser end_sub
sub redimensionner_sprite_(n%,c) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_scale n%,c : ' ajuster largeur et hauteur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser la largeur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser la hauteur end_sub
sub cacher_sprite(n%) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser if sprites(n%,2)=1 : ' est-ce que le sprite est visible ? sprites(n%,0) = sprites(n%,0) + 4000 : ' déplacer hors de la vue sprites(n%,2) = 0 : ' signaler "invisible" end_if end_sub
sub montrer_sprite(n%) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser if sprites(n%,2)=0 : ' est-ce que le sprite est invisible ? sprites(n%,0) = sprites(n%,0) - 4000 : ' replacer dans la partie visible sprites(n%,2) = 1 : ' signaler "visible" end_if end_sub
sub chercher_sprite_selon_clic() dim_local i%, x%, y%, xs%, ys% sprite_trouve% = 0 : ' supposer "non trouvé" if number_click<>scene_2d% then exit : ' on n'a pas cliqué dans le scene2d ? if nsprite%=0 then exit_sub : ' pas de sprites créés ? x% = mouse_x_left_down(scene_2d%) : ' mémoriser la position horizontale du clic y% = mouse_y_left_down(scene_2d%) : ' mémoriser la position verticale du clic for i%=1 to nsprite% xs% = sprite_x_position(i%) : ' mémoriser la position horizontale du sprite i% ys% = sprite_y_position(i%) : ' mémoriser la position verticale dusprite i% if (xs%<x%) : ' le bord gauche du sprite est plus à gauche que l'abscisse du clic ? if (xy%<y%) : ' le bord haut du sprite est plus haute que l'ordonnée du sprite ? if xs%+sprite(i%,0)>=x% : ' le bord droit du sprite est plus à droite que l'abscisse du clic ? if ys%+sprite(i%,1)>=y% : ' le bord bas du sprite est plus en bas que l'ordonnée du clic ? sprite_trouve% = i% : ' alors, on a trouvé exit_sub : ' et on sort end_if : ' fin test sur le bord bas du sprite end_if : ' fin test sur le bord droit du sprite end_if : ' fin test sur le bord haut du sprite end_if : ' fin test sur le bord gauche du sprite next i% : ' fin boucle sur les sprites end_sub | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 10:08 | |
| Merci Klaus, ces SUB(s) vont m'être utiles, car c'est mieux que ce que j'ai fait. Je vois une erreur ici (sprite_scale n%,c , ça ne peut marcher car il manque un élément) - Code:
-
sub redimensionner_sprite_(n%,c) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_scale n%,c : ' ajuster largeur et hauteur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser la largeur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser la hauteur end_sub A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 10:47 | |
| Merci, Jean-Claude. C'est corrigé ici: - Code:
-
dim sprites(500,2) : ' jusqu'à 500 sprites ,0)=largeur ,1)=hauteur ,2)=visible/invisible dim nsprite% : ' dernier numéro de sprite créé dim sprite_trouve% : ' numéro du sprite trouvé (ou 0 si non trouvé) dim scene_2d% : ' numéro d'objet du scene2d
scene_2d% = 17 : ' juste un exemple scene2d scene_2d% : ' créer le scene2d sprite_target_is scene_2d% : assurer du bon ciblage end
sub creer_sprite(x%,y%) nsprite% = nsprite% + 1 : ' passer au numéro de sprite suivant sprite nsprite% : ' créer le sprite sprites(nsprite%,0) = 200 : ' mémoriser sa largeur sprites(nsprite%,1) = 200 : ' et sa hauteur sprites(nsprite%,2) = 1 : ' marquer "visible" sprite_position nsprite%,x%,y% : ' positionner le sprite à l'endroit voulu end_sub
sub redimensionner_sprite_x(n%,c) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_x_scale n%,c : ' ajuster la largeur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser end_sub
sub redimensionner_sprite_y(n%,c) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_y_scale n%,c : ' ajuster la hauteur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser end_sub
sub redimensionner_sprite_(n%,cx,cy) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_scale n%,cx,cy : ' ajuster largeur et hauteur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser la largeur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser la hauteur end_sub
sub cacher_sprite(n%) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser if sprites(n%,2)=1 : ' est-ce que le sprite est visible ? sprite_x_position n%,sprite_x_position(n%) + 4000 : ' déplacer hors de la vue sprites(n%,2) = 0 : ' signaler "invisible" end_if end_sub
sub montrer_sprite(n%) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser if sprites(n%,2)=0 : ' est-ce que le sprite est invisible ? sprite_x_position n%,sprite_x_position(n%) - 4000 : ' replacer dans la partie visible sprites(n%,2) = 1 : ' signaler "visible" end_if end_sub
sub chercher_sprite_selon_clic() dim_local i%, x%, y%, xs%, ys% sprite_trouve% = 0 : ' supposer "non trouvé" if number_click<>scene_2d% then exit : ' on n'a pas cliqué dans le scene2d ? if nsprite%=0 then exit_sub : ' pas de sprites créés ? x% = mouse_x_left_down(scene_2d%) : ' mémoriser la position horizontale du clic y% = mouse_y_left_down(scene_2d%) : ' mémoriser la position verticale du clic for i%=1 to nsprite% xs% = sprite_x_position(i%) : ' mémoriser la position horizontale du sprite i% ys% = sprite_y_position(i%) : ' mémoriser la position verticale dusprite i% if (xs%<x%) : ' le bord gauche du sprite est plus à gauche que l'abscisse du clic ? if (xy%<y%) : ' le bord haut du sprite est plus haute que l'ordonnée du sprite ? if xs%+sprite(i%,0)>=x% : ' le bord droit du sprite est plus à droite que l'abscisse du clic ? if ys%+sprite(i%,1)>=y% : ' le bord bas du sprite est plus en bas que l'ordonnée du clic ? sprite_trouve% = i% : ' alors, on a trouvé exit_sub : ' et on sort end_if : ' fin test sur le bord bas du sprite end_if : ' fin test sur le bord droit du sprite end_if : ' fin test sur le bord haut du sprite end_if : ' fin test sur le bord gauche du sprite next i% : ' fin boucle sur les sprites end_sub En même temps, j'ai corrigé les procédures pour cacher et montrer un sprite... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 11:39 | |
| Bouh, Klaus, tu ne m'a pas lu, dans les 2 autres listing que tu as publié, tu as le mêmes erreurs (le commentaire et le nom de la procédure de redimensionnement en xy... Tu m'ignores, je suis baffoué.. N'ais-je donc vécu que pour cette infamie ? (Bon d'acord, j'en rajoute beaucoup et je surjoue un peu, mais bon, tu comprends l'idée ) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 11:43 | |
| Excuse-moi, Jicehel. J'ai raté ça. Donc, en faisant amende honorable: - Code:
-
dim sprites(500,2) : ' jusqu'à 500 sprites ,0)=largeur ,1)=hauteur ,2)=visible/invisible dim nsprite% : ' dernier numéro de sprite créé dim sprite_trouve% : ' numéro du sprite trouvé (ou 0 si non trouvé) dim scene_2d% : ' numéro d'objet du scene2d
scene_2d% = 17 : ' juste un exemple scene2d scene_2d% : ' créer le scene2d sprite_target_is scene_2d% : ' assurer du bon ciblage end
sub creer_sprite(x%,y%) nsprite% = nsprite% + 1 : ' passer au numéro de sprite suivant sprite nsprite% : ' créer le sprite sprites(nsprite%,0) = 200 : ' mémoriser sa largeur sprites(nsprite%,1) = 200 : ' et sa hauteur sprites(nsprite%,2) = 1 : ' marquer "visible" sprite_position nsprite%,x%,y% : ' positionner le sprite à l'endroit voulu end_sub
sub redimensionner_sprite_x(n%,c) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_x_scale n%,c : ' ajuster la largeur sprites(n%,0) = sprites(n%,0)*c : ' et mémoriser end_sub
sub redimensionner_sprite_y(n%,c) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_y_scale n%,c : ' ajuster la hauteur sprites(n%,1) = sprites(n%,1)*c : ' et mémoriser end_sub
sub redimensionner_sprite_xy(n%,cx,cy) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser sprite_scale n%,cx,cy : ' ajuster largeur et hauteur sprites(n%,0) = sprites(n%,0)*cx : ' et mémoriser la largeur sprites(n%,1) = sprites(n%,1)*cy : ' et mémoriser la hauteur end_sub
sub cacher_sprite(n%) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser if sprites(n%,2)=1 : ' est-ce que le sprite est visible ? sprite_x_position n%,sprite_x_position(n%) + 4000 : ' déplacer hors de la vue sprites(n%,2) = 0 : ' signaler "invisible" end_if end_sub
sub montrer_sprite(n%) if (n%<1) or (n%>nsprite%) then exit_sub : ' sécuriser if sprites(n%,2)=0 : ' est-ce que le sprite est invisible ? sprite_x_position n%,sprite_x_position(n%) - 4000 : ' replacer dans la partie visible sprites(n%,2) = 1 : ' signaler "visible" end_if end_sub
sub chercher_sprite_selon_clic() dim_local i%, x%, y%, xs%, ys% sprite_trouve% = 0 : ' supposer "non trouvé" if number_click<>scene_2d% then exit : ' on n'a pas cliqué dans le scene2d ? if nsprite%=0 then exit_sub : ' pas de sprites créés ? x% = mouse_x_left_down(scene_2d%) : ' mémoriser la position horizontale du clic y% = mouse_y_left_down(scene_2d%) : ' mémoriser la position verticale du clic for i%=1 to nsprite% xs% = sprite_x_position(i%) : ' mémoriser la position horizontale du sprite i% ys% = sprite_y_position(i%) : ' mémoriser la position verticale dusprite i% if (xs%<x%) : ' le bord gauche du sprite est plus à gauche que l'abscisse du clic ? if (ys%<y%) : ' le bord haut du sprite est plus haute que l'ordonnée du sprite ? if xs%+sprites(i%,0)>=x% : ' le bord droit du sprite est plus à droite que l'abscisse du clic ? if ys%+sprites(i%,1)>=y% : ' le bord bas du sprite est plus en bas que l'ordonnée du clic ? sprite_trouve% = i% : ' alors, on a trouvé exit_sub : ' et on sort end_if : ' fin test sur le bord bas du sprite end_if : ' fin test sur le bord droit du sprite end_if : ' fin test sur le bord haut du sprite end_if : ' fin test sur le bord gauche du sprite next i% : ' fin boucle sur les sprites end_sub EDIT J'ai reporté les différentes corrections des messages suivants dans ce code.
Dernière édition par Klaus le Sam 23 Mai 2015 - 22:30, édité 1 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Des procédures pour la 2D Sam 23 Mai 2015 - 12:22 | |
| Ça prouve que Klaus n’a même pas besoin de tester ses propres codes pour savoir qu’ils s’exécutent comme il se doit ! | |
| | | Contenu sponsorisé
| Sujet: Re: Des procédures pour la 2D | |
| |
| | | | Des procédures pour la 2D | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |