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
» Logiciel de planétarium.
On_Sprite_Click N,L - Page 2 Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
On_Sprite_Click N,L - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
On_Sprite_Click N,L - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
On_Sprite_Click N,L - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
On_Sprite_Click N,L - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
On_Sprite_Click N,L - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
On_Sprite_Click N,L - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
On_Sprite_Click N,L - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
On_Sprite_Click N,L - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
On_Sprite_Click N,L - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
On_Sprite_Click N,L - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
On_Sprite_Click N,L - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
On_Sprite_Click N,L - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
On_Sprite_Click N,L - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
On_Sprite_Click N,L - Page 2 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-17%
Le deal à ne pas rater :
(Black Friday) Apple watch Apple SE GPS + Cellular 44mm (plusieurs ...
249 € 299 €
Voir le deal

 

 On_Sprite_Click N,L

Aller en bas 
+4
Klaus
Jean Claude
Jicehel
Yannick
8 participants
Aller à la page : 1, 2  Suivant

Soutenez vous ces deux commandes ?
Oui
On_Sprite_Click N,L - Page 2 Vote_lcap78%On_Sprite_Click N,L - Page 2 Vote_rcap
 78% [ 7 ]
Non
On_Sprite_Click N,L - Page 2 Vote_lcap22%On_Sprite_Click N,L - Page 2 Vote_rcap
 22% [ 2 ]
Total des votes : 9
 
Sondage clos

AuteurMessage
Jack
Admin
Jack


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyMer 20 Mar 2013 - 21:35

Pouvoir cliquer sur un SPRITE est une fonction qui manque à un SCENE2D.
Mais terriblement difficile à faire. Car l'image qui s'affiche sur le SCENE2D est le résultat d'une fusion du fond et des sprites: ce n'est rien d'autre qu'une image.
C'est comme si je prenais une rue en photo et que je veuille cliquer sur la voiture rouge en stationnement ... alors que ce n'est qu'une tache colorée d'une image ...
Ce qui est possible de faire, c'est d'introduire la notion de curseur et d'affecter un sprite au curseur de la souris (croix, rond, carré, ...) et de tester la collision du curseur avec un sprite du SCENE2D.

Il manque aussi d'autres choses importantes au SCENE2D: la collision des sprites (par "pixel perfect" ou par rectangle englobant) et une "profondeur" qui permettrait à des sprites de passer dessus ou dessous d'autres sprites.
Tout cela, j'ai l'intention de le faire. Mais il me faut le temps de les mettre en place...
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Froggy One

Froggy One


Nombre de messages : 598
Date d'inscription : 06/01/2012

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Commentaire inutile... mais ça fait du bien !!!   On_Sprite_Click N,L - Page 2 EmptyMer 20 Mar 2013 - 21:50

Patience, courage, zénitude... Moi j'aimerais que... Non, je plaisante!

VIVE LE TRAVAIL D’ÉQUIPE !!!


Déjà que seul, je n'arrive pas à faire tout ce que je veux pour moi, alors en groupe...
Revenir en haut Aller en bas
http://gaeldwest.wordpress.com
Yannick




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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: re   On_Sprite_Click N,L - Page 2 EmptyMer 20 Mar 2013 - 22:59

Merci de ta réponse Jack,

Il me semblait bien qu'il y avait un problème technique à la chose. Wink

Je prends donc mon mal en patience... Laughing
Revenir en haut Aller en bas
papydall

papydall


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyMer 20 Mar 2013 - 23:06

Hélas, on ne peut pas te donner un peu de temps de notre temps, Jack !
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 1:09

@Jack:
Voici une simulation de l'identification du sprite cliqué en Panoramic pur. L'exemple utilise deux sprites, un tableau contenant, pour chaque sprite, son numéro, la largeur et sa hauteur. Lors d'un clic dans le scene2d, on parcourt cette liste et on teste si le clic correspond à un rectangle du sprite. La boucle parcourt la liste de la fon vers le début pour tenir compte de la superposition des sprites:
Code:
label click
dim i%, x%, y%, ns%
dim number_sprite_click%

scene2d 1 : on_click 1,click

ns% = 2 : ' 2 sprites
dim sprites%(ns%,2)

sprite 1 : sprite_position 1,300,10
sprite_file_load 1,"file_1.bmp" : ' ex: taille 30x100 pixels
sprites%(1,0) =  1 : " numéro du premier sprite
sprites%(1,1) = 300 : ' largeur du premier sprite
sprites%(1,2) =  10 : ' largeur du premier sprite

sprite 2 : sprite_position 2,10,50
sprite_file_load 2,"file_2.bmp" : ' ex: taille 120x120 pixels
sprites%(2,0) =  1 : " numéro du premier sprite
sprites%(2,1) = 120 : ' largeur du premier sprite
sprites%(2,2) = 120 : ' largeur du premier sprite

end

click:
  number_sprite_click% = 0  : ' supposer "aucun sprite n'est cliqué"
  x% = mouse_x_left_down(1)
  y% = mouse_y_left_down(1)
  for i%=ns% to 1 step -1  : ' boucle sur les sprites existants
    ' test si l'abscisse du clic correspond à ce sprite
    if x%>=sprite_x_position(sprites%(i%,0)
      if x%<(sprite_x_position(sprites%(i%,0))+sprite_x_position(sprites%(i%,1)))
        ' test si l'ordonnée du clic correspond à ce sprite
        if y%>=sprite_y_position(sprites%(i%,0)
          if y%<(sprite_y_position(sprites%(i%,0))+sprite_y_position(sprites%(i%,2)))
            ' alors on a identifié le sprite
            number_sprite_click% = sprites%(i%,0)
            return
          end_if
        end_if
      end_if
    end_if
  next i%
  return
 

En Delphi, ceci est infiniment plus simple, à l'aide de la fonction PtInRect() de Delphi.


Dernière édition par Klaus le Jeu 21 Mar 2013 - 16:03, édité 1 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: re   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 2:04

Vérifies Klaus, j'ai des messages d'erreur "Not logical expression"

Mais bon si y'a moyen de moyenner çà dans une dll... Laughing

Je vois que pour le moment, il me faut passer par des tableaux de variable pour recréer des grilles de valeur
et au bout d'un moment une chatte n'y retrouve plus ses petits... Laughing
Et ce n'est valable que sur des positions définies vers des positions définies.
Je n'ose même pas imaginer sur des positions non définis ou là les tableaux devraient prendre en compte chaque pixel... affraid
Essayes de visualiser pour un scene2d de 800x800 drunken

Edit : rassures toi, je n'ai pas encore d'inspiration pour un tel jeu Laughing


J' en remets une couche car j'arrivais pas à l'exprimer tout à l'heure:

le fait que le sprite devienne un objet avec son numéro cliquable et par conséquent que l'on puisse récupérer
le numéro du sprite cliqué fait qu'au lieu d'affecter des valeurs sur le scene2d on les affecterait au sprite... geek et là...
...çà devient presque un jeu d'enfants ....
Revenir en haut Aller en bas
Klaus

Klaus


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 16:24

J'ai corrigé deux lignes - il y avait une parenthèse fermante en trop. Ce code a été saisi directement dans la page du forum, sans passer par l'éditeur. C'est juste pour montrer le principe:
1. on a un tableau contenant 3 informations pour chaque sprite:
- son numéro
- sa largeur
- sa hauteur
sa position x et y est connue par les fonctions sprite_x_position() et sprite_y_position(), donc pas besoin de les mémoriser
2. pour chaque clic dans le scene2d, on obtient les coordonnées par mouse_x_left_down() et mouse_y_left_down()
3. on fait une boucle, commençant au dernier sprite créé et terminant par le premier, et on vérifie si le clic a lieu à l'intérieur du rectangle dont le coin en haut à gauche est fourni par la position du sprite, et les coordonnées du coin en bas à droite s'obtiennent en additionnant les dimensions du sprite mémorisés dans le tableau
4. dès qu'on constate que le clic est à l'intérieur d'un sprite, on met sont numéro (mémorisé dans le tableau) dans la variable number_sprite_click, et à ce moment, on devrait théoriquement déclencher l'évènement on_sprite_click dont la routine aurait été enregistrée par la commande ON_SPRITE_CLICK N,R, avec N étant un numéro de sprite et R le nom d'un label Panoramic. Ceci concerne bien sur uniquement le noyau de Panoramic si c'est fait par Jack - le morceau de code présenté ici ne peut pas faire cela. Ce code ne sert qu'à montrer comment on peut facilement détecter le sprite visé.

Le fait de faire la boucle à l'envers tient compte de la superposition des sprites. En effet, et dans l'état actuel de Panoramic, chaque nouveau sprite créé est placé "par-dessus" tous les autres. En commençant donc par le dernier, on a systématiquement celui qui est au-dessus, et on ne détecte pas un sprite qui serait caché par un autre.

Cette technique de détection test valable quelque soit la taille su scene2d. Et en delphi, cette suite de 4 IFs imbriqués se remplace par une seule lgne:*
Code:
if PtInRect(RectangleDuSprite, PointDuClic) then ..... // détection du sprite visé
On ne travaille pas du tout sur l'image affichée, dans laquelle on ne peut effectivement pas savoir quel sprite est visé. On travaille uniquement avec les propriétés du sprite qui sont forcément mémorisées dans une table interne à Panoramic (numéro, position, dimension), et rien d'autre entre en ligne de compte. Et à condition d'ajouter une extension de ces tables pour ajouter la mémorisation du nom de l'évènement ON_SPRITE_CLICK, le déclenchement de l'évènement se fait exactement de la même manière que pour un ON_CLICK den'importe que objet.

Je souligne au passage que si cette modification est faite, cela ne transforme pas pour autant un sprite en objet Panoramic clasique ! Il reste un sprite avec sa série de numérotation totalement indépendante des numéros des objets. Il acquiert simplement de nouvelles capacités, c'est tout. Rien d'autre ne change dans la logique de Panoramic.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: re   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 17:23

Je pense que tu viens d'ouvrir une piste pour Jack
et je garde en favoris cette page avec ta démo pour
une étude approfondie de la chose Laughing

Merci à toi pour cette nouvelle fonction.
Revenir en haut Aller en bas
Jack
Admin
Jack


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 19:35

@Klaus:
Oui, je vois bien ce que tu veux faire, et c'est le premier algorithme qui vient à l'esprit.
Malheureusement, ce n'est pas si simple car un SPRITE n'est pas rectangulaire et il faut tenir compte de la couleur transparente (qui est le noir pour Panoramic).

J'utilise ton algorithme pour ce sprite représentant un personnage sous forme d'ellipse verticale:
On_Sprite_Click N,L - Page 2 Sprite10
J'utilise un fond bleu ciel.
Le personnage va donc apparaitre ainsi:
On_Sprite_Click N,L - Page 2 Fond10

Maintenant, si je clique en A, ça fonctionne.

Mais si je clique en B, ça fonctionne aussi, car je clique à l'intérieur du rectangle qui a servi à définir mon sprite.
Or, pour un joueur qui clique en B, il a cliqué à côté du personnage et pour lui, le clic ne doit pas être actif.
Et là, j'entends déjà tous les joueurs crier: au bug ! au bug ! Very Happy Very Happy
et intervenir sur le forum: BUG, BUG, BUG ON_SPRITE_CLICK NE FONCTIONNE PAS !!! Very Happy Very Happy
On_Sprite_Click N,L - Page 2 Fond110

Un joueur n'a pas notion de SPRITE et de son rectangle de définition (rectangle englobant pour reprendre les termes classiques), il ne connait que ce qui est représenté par le SPRITE, ce que j'ai appelé le personnage.

Et mon raisonnement se base sur une forme simple. Imagine un sprite concave ou en forme d'anneau (qui a des "trous") à l'intérieur ...

Autre chose:
Imagine un sprite n°1 comme celui que j'ai fait (ellipse) et un sprite en forme d'anneau n°2 devant lui. Ou clique dans la partie creuse de l'anneau.
Si on part du sprite ayant le plus grand numéro comme dans ton algorithme, on s'arrête au numéro 2 car le clic est dans son rectangle.
Or, c'est sur le sprite n°1 qu'on a cliqué...
Et là, nouvelle avalanche de messages:
BUG, BUG, BUG NUMBER_SPRITE_CLICK NE FONCTIONNE PAS !!! Very Happy Very Happy
Revenir en haut Aller en bas
https://panoramic.1fr1.net
pascal10000

pascal10000


Nombre de messages : 812
Localisation : Troyes
Date d'inscription : 05/02/2011

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 20:53

bsr

klaus je peut te proposé un système pour installé un picture de 30X30
dans un autre picture plus grand
en ce moment je suis en train de créer un pacman avec un editeur de circuit
ça pourrait vous donné des idées avec des sprite je n'ai pas fait de teste
mais ça doit marché
donc le picture de 30X30 je l'installe ou je veut dans un picture de 570X570
sur un point tres precis
voici un extrai du code

Code:
 selection:
 n=number_click
 2d_target_is n
 2d_image_copy 30,0,0,30,30
 2d_target_is 51
 2d_image_paste 30,0,0
 return

xmou=int(mouse_x_left_down(1)/30)+1
x=-30+(30*xmou)
ymou=int(mouse_y_left_down(1)/30)+1
y=-30+(30*ymou)
item_delete 101,ymou

2d_target_is 1
2d_image_paste 30,x,y
gob(xmou,ymou)=str$(n)

si tu veut le code complet
tu peut le telechargé ici: gob v1

ou directement sur mon webdav:panoramic@pascal10000 :code panoramic123

bonsoir!

Revenir en haut Aller en bas
Klaus

Klaus


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 21:09

@Jack:
Je comprends tes objections, et je n'ai bien entendu aucune idée comment les sprites sont implémentés de façon interne.

Cependant, je suppose que tu as quelque part la bitmap complète, rectangulaire, y compris les pixels noirs, car à chaque déplacement d'un sprite, tu dois évidemment recalculer complètement l'image globale résultante. Et donc, il est facile de savoir, pour des coordonnées de clic données, si le pixel d'un sprite sous le curseur est noir ou pas. La version modifiée de mon code ci-après en tient compte:
Code:
label click
dim i%, x%, y%, ns%
dim number_sprite_click%

scene2d 1 : on_click 1,click

ns% = 2 : ' 2 sprites
dim sprites%(ns%,2)

sprite 17 : sprite_position 17,300,10
sprite_file_load 17,"file_17.bmp" : ' ex: taille 30x100 pixels
sprites%(1,0) =  17 : " numéro du premier sprite
sprites%(1,1) = 300 : ' largeur du premier sprite
sprites%(1,2) =  10 : ' largeur du premier sprite

sprite 12 : sprite_position 12,10,50
sprite_file_load 12,"file_1.bmp" : ' ex: taille 120x120 pixels
sprites%(2,0) =  12 : " numéro du second sprite
sprites%(2,1) = 120 : ' largeur du second sprite
sprites%(2,2) = 120 : ' largeur du second sprite

end

click:
  number_sprite_click% = 0  : ' supposer "aucun sprite n'est cliqué"
  x% = mouse_x_left_down(1)
  y% = mouse_y_left_down(1)
  for i%=ns% to 1 step -1  : ' boucle sur les sprites existants
    ' test si l'abscisse du clic correspond à ce sprite
    if x%>=sprite_x_position(sprites%(i%,0)
      if x%<(sprite_x_position(sprites%(i%,0))+sprite_x_position(sprites%(i%,1)))
        ' test si l'ordonnée du clic correspond à ce sprite
        if y%>=sprite_y_position(sprites%(i%,0)
          if y%<(sprite_y_position(sprites%(i%,0))+sprite_y_position(sprites%(i%,2)))
            ' alors on a identifié le sprite
            if sprite_color(i%,x%-sprite_x_position(sprites%(i%,1)),y%-sprite_y_position(sprites%(i%,1)))<>...noir... begin
              number_sprite_click% = sprites%(i%,0)
              : ' .. lancer ici la routine on_sprite_click
            end
            return
          end_if
        end_if
      end_if
    end_if
  next i%
  return

Et je suis d'accord avec toi pour dire qu'on ne peut pas se baser sur le numéro des sprite dans l'ordre croissant. C'est bien pour cela que j'ai placé les numéros des sprites dans la table - une table qui sera chargée, un peu comme une pile, avec le premier sprite créé dans la cellule 1, le second sprite créé dans la cellule 2 etc, quelque soit le numéro du sprite. Ceci correspond, et j'en suis certain, à ta liste des sprites actuellement gérée dans Panoramic, car c'est le seul moyen d'expliquer la superposition du sprite le plus récent sur les autres: en redéssinant l'image du scene2d après un mouvement d'un sprite, tu appliques certainement sprite après sprite, en tenant chaque fois compte de la couleur noire pour la transparence, et ainsi de suite du premier sprite créé jusqu'au dernier, dans le sens de la chronologie de création, et non par rapport aux numéros des sprites (qui n'ont aucune importance à ce niveau).

C'est pourquoi, dans mon code proposé, je parcours la liste du plus récent au plus ancien, et je m'arrête sur celui qui est touché, sachant ainsi que je touche forcément celui qui est le plus "haut", donc le plus récent. Et en tenant compte de la couleur noire comme dans le code ci-dessus, je touche bien le sprite dont la couleur non-noire est le plus récent.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 21:16

@pascal10000:
Il marche bien, ton code.
Nombre d'entre nous ont trouvé des solutions similaires à ce problème (qui est un peu en-dehors du sujet actuel, mais néanmoins intéressant).

Je t'invite à regarder la documentation de la dll nommée KGF.dll, contenue dans le fichier KGF.chm. Plus particuliairement la rubrique "Gestion d'images", et la fonction ModifyPicture qui s'y trouve (mais il y en a plein d'autres qui sont intéressantes): cette fonction fait cela, mais avec en plus la possibilité de gérer une couleur quelconque comme couleur de transparence ET de gérer le degré de transparence ou d'opacité. Je me suis intéressé de près à la gestion des images.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
pascal10000

pascal10000


Nombre de messages : 812
Localisation : Troyes
Date d'inscription : 05/02/2011

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 21:34

dsl klaus mais pour manipulé les "DLL" je ne serai pas faire, trop peur
de planté mon ordi
sinon il y a longtemps que j'aurai manipule ceux de windows
et des autres logiciel
ça serait un peut comme si je trifouille le registre de windows ce qui est tres dangeureu
et j'avais plein de projets si j'avais ce niveau a programmer avec visual basic ou même avec C#
mais c'est trop compliqué pour moi et c'est pour cela que je me suis orienté sur panoramic
parce que il est simple et très facile a le prendre en main

et je felicite a jack de se donné tant de mal pour son BB comme il dit
et pour nous tous
sur cela bonsoir et bonne continuation
Revenir en haut Aller en bas
Klaus

Klaus


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 22:06

N'aie pas peur des DLL ! Tant que tu n'utilises pas des fonctions que modifient le registre ou des fichiers système, il n'y a aucun danger ! Même si tu produis une violation d'accès de mémoire, pas de problème. Tu relances ton programme et c'est bon. En développement de mes DLL, j'en produis des dizaines par jour, et tout va bien.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: re   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 22:40

N'aies pas peur Pascal10000 , parfois on parle un peu chinois
mais on finit toujours par ce comprendre... Laughing

Les dll et en particulier celle de Klaus est une source de fonctions
que ne possède pas Panoramic pour l'instant.
Si tu lis la doc "kgf.chm" attentivement tu devrais t'en sortir et,
au cas où tu aies un souci, Klaus répond aux questions.
Revenir en haut Aller en bas
pascal10000

pascal10000


Nombre de messages : 812
Localisation : Troyes
Date d'inscription : 05/02/2011

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyJeu 21 Mar 2013 - 23:23

ben ce qui m'aurai plus c de manipulé les fichier mp3 et les wave
pour créer une table de mixage et qu'il soit en comunication avec
windows pouvoir réglé les grave ,les aigus,la balance
et tous le tointoin mais ça c'est une autre histoire
sinon si tu as une telle librairie alors fait moi ou a nous une proposition

sur ça gros dodo
Revenir en haut Aller en bas
papydall

papydall


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyVen 22 Mar 2013 - 1:45

ygeronimi a écrit:
N'aies pas peur Pascal10000 , parfois on parle un peu chinois
mais on finit toujours par ce comprendre... Laughing
.

Je cours vite m’inscrire au cours du soir pour apprendre le chinois ! 我快速运行(漫游)加入在夜间学习中文! Laughing study
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyVen 22 Mar 2013 - 9:31

Pour illuster mon propos sur les ON_SPRITE_CLICK, voici mon petit code, mais cette fois pleinement opérationnel ! J'ai créé deux sprites:
- un étroit rectangle bleu - sprite 17
- un large anneau rouge - sprite 12
Je crée bien le second sprite avec un numéro inférier à celui du premier sprite, et les numéros ne se suivent pas.
Je superpose l'anneau au rectangle et autorise les clics. Dans la routine on_click du scene2d, j'affiche le numéro du sprite trouvé (contenu de NUMBER_SPRITE_CLICK). On voir qu'on peut cliquer dans problème au travers du trou de l'anneau:
Si l'on vise le rectangle bleu à l'intérieur du trou de l'anneau, on trouve bien le rectangle.
Si l'on vise le fond du scene2d à l'intérieur du trou de l'anneau, on trouve sprite 0 (pas de sprite visé)
Si l'on vise l'anneau là où il superpose le rectangle bleu, on obtient bien le sprite de l'anneau

Donc, mon algorithme fonctionne parfaitement et n'est pas compliqué à implémenter. Le code semble lourd car c'est en Panoramic, mais en Delphi, cela ne représente que quelques lignes.

Voici le code:
Code:
label click
dim i%, x%, y%, ns%, spr%, x1%, y1%
dim number_sprite_click%

scene2d 1 : on_click 1,click : full_space 1 : color 1,200,200,200
image 2

ns% = 0 : ' initialement pas de sprites
dim sprites%(10,2)  : ' pérvoir pour 10 sprites

' premier sprite: rectangle bleu
sprite 17 : sprite_position 17,300,10
picture 17 : hide 17 : width 17,200 : height 17,10
2d_target_is 17 : 2d_pen_color 0,0,255 : 2d_fill_color 0,0,255
2d_rectangle 0,0,199,9
2d_image_copy 2,0,0,199,9
sprite_image_load 17,2
memoriser_sprite(17,200,10)
sprite_position 17,200,200

' deuxième sprite: anneau rouge
sprite 12 : sprite_position 12,10,50
picture 12 : hide 12 : width 12,120 : height 12,120
color 12,0,0,0 : ' fond transparent
2d_target_is 12 : 2d_pen_color 255,0,0 : 2d_fill_color 255,0,0
2d_circle 60,60,50
2d_fill_color 0,0,0
2d_circle 60,60,25
2d_image_copy 2,0,0,119,119
sprite_image_load 12,2
memoriser_sprite(12,120,120)
sprite_position 12,250,150

end

sub memoriser_sprite(n%,w%,h%)
  ns% = ns% + 1        : ' compter le nouveau sprite
  sprites%(ns%,0) = n% : ' numéro du sprite
  sprites%(ns%,1) = w% : ' largeur du sprite
  sprites%(ns%,2) = h% : ' hauteur du sprite
end_sub

click:
  number_sprite_click% = 0  : ' supposer "aucun sprite n'est cliqué"
  x% = mouse_x_left_down(1)
  y% = mouse_y_left_down(1)
  for i%=ns% to 1 step -1  : ' boucle sur les sprites existants
    spr% = sprites%(i%,0)
    x1% = x% - sprite_x_position(spr%)
    y1% = y% - sprite_y_position(spr%)
    ' test si l'abscisse du clic correspond à ce sprite
    if x%>=sprite_x_position(spr%)
      if x%<(sprite_x_position(spr%)+sprites%(i%,1))
        ' test si l'ordonnée du clic correspond à ce sprite
        if y%>=sprite_y_position(spr%)
          if y%<(sprite_y_position(spr%)+sprites%(i%,2))
            ' test si ce n'est pas la couleur transparente
            if (color_pixel_red(spr%,x1%,y1%)+color_pixel_green(spr%,x1%,y1%)+color_pixel_blue(spr%,x1%,y1%))>0
              ' alors on a identifié le sprite
              number_sprite_click% = spr%
              : ' .. lancer ici la routine on_sprite_click
              message "NUMBER_SPRITE_CLICK = "+str$(number_sprite_click%)
              return
            end_if
          end_if
        end_if
      end_if
    end_if
  next i%
  message "NUMBER_SPRITE_CLICK = 0"
  return

Ce code est d'ores et déjà utilisables dans des jeux utilisant scene2d. La procédure memoriser_sprite(n%,w%,h%) mémorise chaque sprite dans la table.

Contrainte en Panoramic: il faut garder les picture contenant l'image du sprite pour pouvoir tester la couleur sous le curseur, et je garde dont les picture, avec le même numéro que le sprite correspondant, pour une question de facilité de programmation. On pourrait aussi créer les picture avec n'importe quel numéro, passer ce numéro en 4ème paramètre à la procédure memoriser_sprite() et copier ce paramètre dans sprites%(ns%,3), après avoir dimensionné le tableau sprites% en consequence. Ce problème ne se pose pas à l'évidence dans le moteur de Panoramic, car de toutes façons, les images des sprites sont mémorisées quelque part, et sont accessibles pour le test de couleur.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: re   On_Sprite_Click N,L - Page 2 EmptyVen 22 Mar 2013 - 10:30

Je regarderai ce soir, là je vais au miam chez beau papa... Laughing
Revenir en haut Aller en bas
Klaus

Klaus


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyVen 22 Mar 2013 - 10:38

Bon appétit ! J'espère qu'il y aura autre chose à boire que du Sprite... Wink
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: re   On_Sprite_Click N,L - Page 2 EmptyVen 22 Mar 2013 - 10:45

Moi aussi, et pas de Panoramic, j'en ai mangé toute la nuit pour résoudre
mon problème de "No repeat....".

Comme quoi, un simple "if" peut vous changer la vie... Laughing
Revenir en haut Aller en bas
Jicehel

Jicehel


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyVen 22 Mar 2013 - 10:45

Ca à l'air sympa ça, je regarderais ce soir ou ce week-end Wink Merci pour le code
Revenir en haut Aller en bas
papydall

papydall


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptyVen 22 Mar 2013 - 11:59

Hmmm !
Je crois que je vais changer de régime et me mettre aux SPRITEs On_Sprite_Click N,L - Page 2 U_THIN%7E1
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptySam 23 Mar 2013 - 0:11

J'ai amélioré mon programme de détection de clic sur un sprite. Les messages d'information sont remplacées par un affichage du texte dans la caption de la form 0. Mais surtout, le sprite cliqué est considéré "sélectionné" et montre cela en vibrant. En cliquant sur un autre sprite, le sprite sélectionné précédemment est désélectionné (ne vibre plus) et le nouveau est sélectionné (vibre à son tour). Si l'on clique ailleurs (pas dans un sprite), le dernier sprite sélectionné est positionné à cet endroit (par son coin en haut à gauche). Cela montre comment on peut déplacer un sprite avec la souris, par exemple.

Code:
' ON_SPRITE_CLICK.bas
label click, tim
dim i%, x%, y%, ns%, spr%, x1%, y1%, delta%
dim number_sprite_click%, save_sprite_click%

delta% = 1

scene2d 1 : on_click 1,click : full_space 1 : color 1,200,200,200
image 2
timer 3 : timer_interval 3,100 : on_timer 3,tim : timer_off 3

ns% = 0 : ' initialement pas de sprites
dim sprites%(10,2)  : ' pérvoir pour 10 sprites

' premier sprite: rectangle bleu
sprite 17 : sprite_position 17,300,10
picture 17 : hide 17 : width 17,200 : height 17,10
2d_target_is 17 : 2d_pen_color 0,0,255 : 2d_fill_color 0,0,255
2d_rectangle 0,0,199,9
2d_image_copy 2,0,0,199,9
sprite_image_load 17,2
memoriser_sprite(17,200,10)
sprite_position 17,200,200

' deuxième sprite: anneau rouge
sprite 12 : sprite_position 12,10,50
picture 12 : hide 12 : width 12,120 : height 12,120
color 12,0,0,0 : ' fond transparent
2d_target_is 12 : 2d_pen_color 255,0,0 : 2d_fill_color 255,0,0
2d_circle 60,60,50
2d_fill_color 0,0,0
2d_circle 60,60,25
2d_image_copy 2,0,0,119,119
sprite_image_load 12,2
memoriser_sprite(12,120,120)
sprite_position 12,250,150

end

sub memoriser_sprite(n%,w%,h%)
  ns% = ns% + 1        : ' compter le nouveau sprite
  sprites%(ns%,0) = n% : ' numéro du sprite
  sprites%(ns%,1) = w% : ' largeur du sprite
  sprites%(ns%,2) = h% : ' hauteur du sprite
end_sub

tim:
  sprite_position number_sprite_click%,sprite_x_position(number_sprite_click%)+delta%,sprite_y_position(number_sprite_click%)+delta%
  delta% = 0 - delta%
  return

click:
  timer_off 3
  save_sprite_click% = number_sprite_click%
  number_sprite_click% = 0  : ' supposer "aucun sprite n'est cliqué"
  x% = mouse_x_left_down(1)
  y% = mouse_y_left_down(1)
  for i%=ns% to 1 step -1  : ' boucle sur les sprites existants
    spr% = sprites%(i%,0)
    x1% = x% - sprite_x_position(spr%)
    y1% = y% - sprite_y_position(spr%)
    ' test si l'abscisse du clic correspond à ce sprite
    if x%>=sprite_x_position(spr%)
      if x%<(sprite_x_position(spr%)+sprites%(i%,1))
        ' test si l'ordonnée du clic correspond à ce sprite
        if y%>=sprite_y_position(spr%)
          if y%<(sprite_y_position(spr%)+sprites%(i%,2))
            ' test si ce n'est pas la couleur transparente
            if (color_pixel_red(spr%,x1%,y1%)+color_pixel_green(spr%,x1%,y1%)+color_pixel_blue(spr%,x1%,y1%))>0
              ' alors on a identifié le sprite
              number_sprite_click% = spr%
              : ' .. lancer ici la routine on_sprite_click
              caption 0,"NUMBER_SPRITE_CLICK = "+str$(number_sprite_click%)
              timer_on 3
              return
            end_if
          end_if
        end_if
      end_if
    end_if
  next i%
  if save_sprite_click%>0 then sprite_position save_sprite_click%,x%,y%
  caption 0,"NUMBER_SPRITE_CLICK = 0"
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


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

On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 EmptySam 23 Mar 2013 - 5:13

Ca marche super bien Klaus, bravo. Encore un code qui peut paraître simple mais qui est hyper pratique et malin Wink
Revenir en haut Aller en bas
Contenu sponsorisé





On_Sprite_Click N,L - Page 2 Empty
MessageSujet: Re: On_Sprite_Click N,L   On_Sprite_Click N,L - Page 2 Empty

Revenir en haut Aller en bas
 
On_Sprite_Click N,L
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant

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: