FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Des procédures pour la 2D  Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Des procédures pour la 2D  Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Des procédures pour la 2D  Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Des procédures pour la 2D  Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Des procédures pour la 2D  Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Des procédures pour la 2D  Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Des procédures pour la 2D  Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Des procédures pour la 2D  Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Des procédures pour la 2D  Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Des procédures pour la 2D  Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Des procédures pour la 2D  Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Des procédures pour la 2D  Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Des procédures pour la 2D  Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Des procédures pour la 2D  Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Des procédures pour la 2D  Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -21%
LEGO® Icons 10329 Les Plantes Miniatures, ...
Voir le deal
39.59 €

 

 Des procédures pour la 2D

Aller en bas 
+2
Jicehel
Jean Claude
6 participants
Aller à la page : 1, 2, 3, 4, 5  Suivant
AuteurMessage
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Des procédures pour la 2D  Empty
MessageSujet: Des procédures pour la 2D    Des procédures pour la 2D  EmptyJeu 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyJeu 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
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyJeu 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. Very Happy

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyJeu 21 Mai 2015 - 15:11

Merci pour ton explication Jean-Claude, je comprends mieux ta demande Wink
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Des procédures pour la 2D  Empty
MessageSujet: re   Des procédures pour la 2D  EmptyJeu 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... Laughing

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.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyJeu 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+
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12301
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyJeu 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyVen 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 Wink
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyVen 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+
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Des procédures pour la 2D  Empty
MessageSujet: re   Des procédures pour la 2D  EmptyVen 22 Mai 2015 - 9:32

Tu as tout mon soutien Jean Claude,
et avec mon quintal... Laughing .
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyVen 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, ...

_________________
Des procédures pour la 2D  Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Des procédures pour la 2D  Empty
MessageSujet: re   Des procédures pour la 2D  EmptyVen 22 Mai 2015 - 18:31

@ Jack,

Tu nous décris une image map..., on prend aussi, on est pas regardant tu sais...
lol!

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. Twisted Evil


Edit: tu peux nous dire la date de la prochaine vs instantanée ?... geek
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyVen 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 ?
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyVen 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+
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12301
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptyVen 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...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12301
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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 OBJECT


Ligne 35
Code:
 sub chercher_sprite_selon-clic()
A corriger par
Code:
 sub chercher_sprite_selon_clic()
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12301
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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 Wink
Je renommé: redimensionner_sprite_ en redimensionner_sprite_xy aussi
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12301
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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+
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12301
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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 Very Happy )
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12301
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  EmptySam 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 ! Laughing
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Des procédures pour la 2D  Empty
MessageSujet: Re: Des procédures pour la 2D    Des procédures pour la 2D  Empty

Revenir en haut Aller en bas
 
Des procédures pour la 2D
Revenir en haut 
Page 1 sur 5Aller à la page : 1, 2, 3, 4, 5  Suivant
 Sujets similaires
-
» Des procédures pour le réseau
» Mes Procédures
» a l'aide sur " procédures "
» Un extracteur de procédures
» Les procédures LINOR et ARCOR

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos souhaits d'amélioration de Panoramic-
Sauter vers: