FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» I Love You
par Jean Claude Aujourd'hui à 18:16

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Aujourd'hui à 18:08

» mise a jour calculatrice
par joeeee2017 Aujourd'hui à 15:57

» [solved] 3D_LINE How to ?
par Jicehel Aujourd'hui à 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Hier à 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

» Un petit "coucou" à tous les Panoramiciens !
par Jack Ven 6 Oct 2017 - 10:24

» Pourquoi le compilateur stagne
par mindstorm Mer 4 Oct 2017 - 20:38

» Panoramic ?
par Marc37 Mer 4 Oct 2017 - 0:39

» Premiers pas avec Arduino
par Marc37 Mer 4 Oct 2017 - 0:29

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 KGF_dll - nouvelles versions

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1 ... 9 ... 13, 14, 15
AuteurMessage
pascal10000

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 21 Juil 2017 - 13:15

bonjour Klaus
La fonction "FindPanoramicObject" fonctionne correctement

Il y a un mais! Elle ne fonctionne uniquement avec la commande "GetAbsoluteMousePosition"
et non avec "GetMousePosition" donc une petit rectification s'impose dans l'aide KGF.chm
bonne journée et merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 21 Juil 2017 - 14:29

Tu as raison ! Merci de l'avoir signalé. Ce sera corrigé pour la prochaine version.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 13 Aoû 2017 - 17:35

Klaus, la capture d" écran ne fonctionne apparemment plus. pale

Code:
sub CaptureJeu()
 show BtnShot%
 SNAP% = dll_call5("CreateScreenSnapshot",1,(screen_x-430)/2,(screen_y-430)/2,430,430)
end_sub

sub TakeSnapshot()
 dim_local f$,res%,m%
 
 f$=mid$(date$,7,4)+mid$(date$,4,2)+mid$(date$,1,2)+"_"
 f$=f$+mid$(Time$,1,2)+mid$(Time$,4,2)+mid$(Time$,7,2)+".jpg"
 f$=Path$+"Capture_"+f$

 hide BtnShot%
 ' message f$+chr$(13)+str$(Snap%)+chr$(13)+str$(adr(f$))
 res% = dll_call2("TakeScreenSnapshot",SNAP%,adr(f$))
 if res%<0
 m%=message_warning_ok("Désolé !"+chr$(13)+"Une erreur s' est produite, la capture a échouée.")
 end_if
 res% = dll_call1("DeleteScreenSnapshot",SNAP%)
end_sub

J' ai droit au message à chaque essai... Crying or Very sad

Précision : Avec le compilateur. (cela fonctionne avec l' interpréteur)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 6 Oct 2017 - 2:22

Nouvelle version:
KGF.dll V7.88 du 05/10/2017

Nouveautés:
- Nouvelles fonctions: MoveRegion, CheckRegionIntersection

Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour. Les sources seront à jour prochainement.

Les fichiers sont sur mon site (et mon site miroir). Le WebDav suivra prochainement.

Voici une démo:
Code:
' test_collisions_de_sprites_avec_regions.bas

label key

dim res%, RGN1%, RGN2%, key%, posx%, posy%, M1%


dll_on "KGF.dll"

M1% = 0 - 1


caption 0,"Flèches pour déplacer le sprite rouge, ESC pour sortir"
image 1 : picture 2 : hide 2 : width 2,100 : height 2,50
scene2d 3 : full_space 3 : color 3,200,200,200

2d_target_is 2
  
color 2,255,0,0 : 2d_image_copy 1,0,0,100,50
sprite 1 : sprite_image_load 1,1
sprite_position 1,50,20
posx% = 50
posy% = 20
RGN1% = 0
RGN1% = DLL_call5("WindowAddRectangleRegion",adr(RGN1%),posx%,posy%,100,50)

color 2,0,0,255 : 2d_image_copy 1,0,0,100,50
sprite 2 : sprite_image_load 2,1
sprite_position 2,200,150
RGN2% = 0
RGN2% = DLL_call5("WindowAddRectangleRegion",adr(RGN2%),200,150,100,50)

sprite 3
font_size 3,20
font_color 3,255,0,0
font_bold 3
sprite_text 3,"Contact !"
sprite_position 3,200,0
sprite_hide 3

on_key_down 0,key

end

key:
  key% = scancode
  if key%=27 then terminate
  if key%=37 then gauche()
  if key%=38 then haut()
  if key%=39 then droite()
  if key%=40 then bas()
  
  return
  
sub gauche()
  sprite_hide 3
  posx% = posx% - 1
  sprite_position 1,posx%,posy%
  res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  if res%=0 then message "oups"
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),1,0)  
  end_if
end_sub

sub haut()
  sprite_hide 3
  posy% = posy% - 1
  sprite_position 1,posx%,posy%
  res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  if res%=0 then message "oups"
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  end_if
end_sub

sub droite()
  sprite_hide 3
  posx% = posx% + 1
  sprite_position 1,posx%,posy%
  res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  if res%=0 then message "oups"
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  end_if
end_sub

sub bas()
  sprite_hide 3
  posy% = posy% + 1
  sprite_position 1,posx%,posy%
  res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  if res%=0 then message "oups"
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  end_if
end_sub


Avec les flèches, essayez de déplacer le sprite mobile sur le sprite fixe...

La touche Echap termine le programme.

EDIT

Le WebDav est à jour également - DLL, CHM et sources.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Pedro Alvarez

avatar

Nombre de messages : 829
Date d'inscription : 19/01/2014

MessageSujet: kgf.dll   Ven 6 Oct 2017 - 10:09

Bonjour à tous.

Ah, je suis vraiment très content de te retrouver sur ce forum Klaus.

Amicalement.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 6 Oct 2017 - 11:39

J'ai corrigé une petite maladresse de programmation dans mon code exemple Panoramic. En effet, il vaut mieux faire le test de collision AVANT de déplacer physiquement le sprite:
Code:
' test_collisions_de_sprites_avec_regions.bas

label key

dim res%, RGN1%, RGN2%, key%, posx%, posy%, M1%


dll_on "KGF.dll"

M1% = 0 - 1


caption 0,"Flèches pour déplacer le sprite rouge, ESC pour sortir"
image 1 : picture 2 : hide 2 : width 2,100 : height 2,50
scene2d 3 : full_space 3 : color 3,200,200,200

2d_target_is 2
 
color 2,255,0,0 : 2d_image_copy 1,0,0,100,50
sprite 1 : sprite_image_load 1,1
sprite_position 1,50,20
posx% = 50
posy% = 20
RGN1% = 0
RGN1% = DLL_call5("WindowAddRectangleRegion",adr(RGN1%),posx%,posy%,100,50)

color 2,0,0,255 : 2d_image_copy 1,0,0,100,50
sprite 2 : sprite_image_load 2,1
sprite_position 2,200,150
RGN2% = 0
RGN2% = DLL_call5("WindowAddRectangleRegion",adr(RGN2%),200,150,100,50)

sprite 3
font_size 3,20
font_color 3,255,0,0
font_bold 3
sprite_text 3,"Contact !"
sprite_position 3,200,0
sprite_hide 3

on_key_down 0,key

end

key:
  key% = scancode
  if key%=27 then terminate
  if key%=37 then gauche()
  if key%=38 then haut()
  if key%=39 then droite()
  if key%=40 then bas()
 
  return
 
sub gauche()
  sprite_hide 3
  posx% = posx% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  else 
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub haut()
  sprite_hide 3
  posy% = posy% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub droite()
  sprite_hide 3
  posx% = posx% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub bas()
  sprite_hide 3
  posy% = posy% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 6 Oct 2017 - 15:05

Nouvelle version:
KGF.dll V7.89 du 06/10/2017

Nouveautés:
- Nouvelle fonction: CheckPointInRegion

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Cette fonction complète les possibilités de travail avec des régions compexes, associées à des sprites. Elle permet de svoir si un point fait partie d'une région quelconque, ou noon. Ceci permet par exemple de tester si un tir touche un sprite, à un endroit précis. Il y a plein d'autres applications.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Sam 7 Oct 2017 - 12:45

Nouvelle version:
KGF.dll V7.90 du 07/10/2017

Nouveautés:
- Nouvelle fonction: DeleteRegion

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Cette fonction permet de suprimer une région lorsqu'elle n'est plus utilisée. Dans Windows, chaque région est représentée par un handle global pointant vers uns structure de taille variable en mémoire décrivant la région. Cet espace, ainsi que le handle global lui-même, représente une consommation de resources qu'on peut optimiser dès l'instant qu'on n'a plus besoin de la région. Certes, cela ne s'applique pas pour les régions décrivant la forme d'une fenêtre, pour des raisons évidentes. Par contre, lors de l'utilisation des régions en lien avec des sprites, il est fortement conseillé de supprimer ces régions dès que les sprites concernés sont supprimés, ou au plis tard à la fin du programme.

Voici le programme de démo, adapté à a suppression propre des régions utilisées:
Code:
' test_collisions_de_sprites_avec_regions.bas

label key, exit

dim res%, RGN1%, RGN2%, key%, posx%, posy%, M1%


dll_on "KGF.dll"

M1% = 0 - 1

on_close 0,exit

caption 0,"Flèches pour déplacer le sprite rouge, ESC pour sortir"
image 1 : picture 2 : hide 2 : width 2,100 : height 2,50
scene2d 3 : full_space 3 : color 3,200,200,200

2d_target_is 2
 
color 2,255,0,0 : 2d_image_copy 1,0,0,100,50
sprite 1 : sprite_image_load 1,1
sprite_position 1,50,20
posx% = 50
posy% = 20
RGN1% = 0
RGN1% = DLL_call5("WindowAddRectangleRegion",adr(RGN1%),posx%,posy%,100,50)

color 2,0,0,255 : 2d_image_copy 1,0,0,100,50
sprite 2 : sprite_image_load 2,1
sprite_position 2,200,150
RGN2% = 0
RGN2% = DLL_call5("WindowAddRectangleRegion",adr(RGN2%),200,150,100,50)

sprite 3
font_size 3,20
font_color 3,255,0,0
font_bold 3
sprite_text 3,"Contact !"
sprite_position 3,200,0
sprite_hide 3

on_key_down 0,key

end

key:
  key% = scancode
  if key%=27 then sortie()
  if key%=37 then gauche()
  if key%=38 then haut()
  if key%=39 then droite()
  if key%=40 then bas()
 
  return
 
exit:
  res% = dll_call1("DeleteRegion",adr(RGN1%))
  res% = dll_call1("DeleteRegion",adr(RGN2%))
  return
 
sub sortie()
  gosub exit
  terminate
end_sub
 
sub gauche()
  sprite_hide 3
  posx% = posx% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  else 
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub haut()
  sprite_hide 3
  posy% = posy% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub droite()
  sprite_hide 3
  posx% = posx% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub bas()
  sprite_hide 3
  posy% = posy% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Dim 8 Oct 2017 - 18:36

Voici une nouvele version dui programme de démo des collisions détectées par l'utilisation des régions Windows. A la place de simples rectangles, le programme utilise des triangles, créées dans le code Panoramic par les commandes 2D. Puis, on construit les régions à partir des bitmaps de ces triangles. Cela montr qu'on peut utiliser n'importe quelle bitmap pour cela, en spécifiant la couleur de transparence (ici, c'est 0=noir car c'est la couleur de transparence des sprites en Panoramic).

On déplace toujours le sprite rouge par les fléches. Et dès qu'une des pointes du traingle rouche touche un point du triangle bleu (ou inversement), le contact est détecté. Cela montre à la perfection que la détection ne se jour plus sur le rectangle englobant, mais bien sur la partie significative (non transparente) des sprites.

Voici le code:
Code:
' test_collisions_de_sprites_avec_regions.bas

label key, exit

dim type_sprite%
' type_sprite% = 1 : ' rectangle
type_sprite% = 2 : ' triangle

dim res%, RGN1%, RGN2%, key%, posx%, posy%, M1%, bmp$
bmp$ = "temp.bmp"


dll_on "KGF.dll"

M1% = 0 - 1

on_close 0,exit

caption 0,"Flèches pour déplacer le sprite rouge, ESC pour sortir"
image 1 : picture 2 : hide 2 : width 2,100 : height 2,50
scene2d 3 : full_space 3 : color 3,200,200,200

2d_target_is 2
  
select type_sprite%
  case 1
    color 2,255,0,0 : 2d_image_copy 1,0,0,100,50
    sprite 1 : sprite_image_load 1,1
    sprite_position 1,50,20
    posx% = 50
    posy% = 20
    RGN1% = 0
    RGN1% = DLL_call5("WindowAddRectangleRegion",adr(RGN1%),posx%,posy%,100,50)
  case 2
    color 2,0,0,0
    2d_pen_color 255,0,0
    2d_pen_width 3
    2d_fill_color 255,0,0
    2d_poly_from 50,10 : 2d_poly_to 90,45 : 2d_poly_to 20,30 : 2d_poly_to 50,10
    2d_flood 50,30,255,0,0
    2d_image_copy 1,0,0,100,50
    file_save 2,bmp$
    sprite 1 : sprite_image_load 1,1
    sprite_position 1,50,20
    posx% = 50
    posy% = 20
    RGN1% = 0
    RGN1% = DLL_call5("WindowCreateRegionFromBMP",adr(bmp$),adr(RGN1%),0,0,0)
    res% = DLL_call3("MoveRegion",adr(RGN1%),posx%,posy%)
    file_delete bmp$
end_select

select type_sprite%
  case 1
    color 2,0,0,255 : 2d_image_copy 1,0,0,100,50
    sprite 2 : sprite_image_load 2,1
    sprite_position 2,200,150
    RGN2% = 0
    RGN2% = DLL_call5("WindowAddRectangleRegion",adr(RGN2%),200,150,100,50)
  case 2
    color 2,0,0,0
    2d_pen_color 0,0,255
    2d_pen_width 3
    2d_fill_color 255,0,0
    2d_poly_from 50,10 : 2d_poly_to 90,45 : 2d_poly_to 20,30 : 2d_poly_to 50,10
    2d_flood 50,30,0,0,255
    2d_image_copy 1,0,0,100,50
    file_save 2,bmp$
    sprite 2 : sprite_image_load 2,1
    sprite_position 2,200,150
    RGN2% = 0
    RGN2% = DLL_call5("WindowCreateRegionFromBMP",adr(bmp$),adr(RGN2%),0,0,0)
    res% = DLL_call3("MoveRegion",adr(RGN2%),200,150)
    file_delete bmp$
end_select

sprite 3
font_size 3,20
font_color 3,255,0,0
font_bold 3
sprite_text 3,"Contact !"
sprite_position 3,200,0
sprite_hide 3

on_key_down 0,key

end

key:
  key% = scancode
  if key%=27 then sortie()
  if key%=37 then gauche()
  if key%=38 then haut()
  if key%=39 then droite()
  if key%=40 then bas()
  
  return
  
exit:
  res% = dll_call1("DeleteRegion",adr(RGN1%))
  res% = dll_call1("DeleteRegion",adr(RGN2%))
  return
  
sub sortie()
  gosub exit
  terminate
end_sub
  
sub gauche()
  sprite_hide 3
  posx% = posx% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% + 1
    res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  else  
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub haut()
  sprite_hide 3
  posy% = posy% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% + 1
    res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub droite()
  sprite_hide 3
  posx% = posx% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% - 1
    res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub bas()
  sprite_hide 3
  posy% = posy% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% - 1
    res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

Et voici une détection, en abaissant le triangle rouge sur le triangle bleu, par le haut:


EDIT

Un peu de didactique autour de cela:
Imaginons un personnage comme un combattant avec une épée. On peut placer son image dans un sprite sur fond noir, et il va se déplacer normalement. On va maintenant définir une région par WindowCreateRegionFromBMP comprenant la totalité du personnage. Conséquence: on peut facilement savoir si le personnage va se heurter ) un élément du décor (mur, arbre, ...), en définissant une seule région contenant l'ensemble des éléments fixes du décor. Mais on peut aussi définir une région juste pour l'épée, et savoir ainsi si l'épée "pique" un autre personnage (entre en collision avec la région associée à l'autre personnage). On obtient ainsi une gestion très fine des collisions, avec une application directe sur les actions à effectuer.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Lun 9 Oct 2017 - 12:20

Nouvelle version:
KGF.dll V7.91 du 09/10/2017

Nouveautés:
- Nouvelles fonctions: CreateRegionGroup, AddRegionToGroup, DeleteRegionGroup, MoveRegionGroup

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Ces fonctions introduisent une nouvelle notion: le groupe de régions. C'est un simple regroupement logique de plusieurs régions (le nombre n'est pas limité) dans le but de pourvoir déplacer toutes ces régions en un sel appel d'une fonction DLL, de façon synchrone. Ce sera beaucoup plus performat que de faire appel à la fonction de déplacement d'une région dans une boucle Panoramic.

A quoi ça sert ? Imaginons un personnage dans un jeu video en 2D. On veut tester les contacts (collisions) avec certaines parties du personnage (pieds, tête, épée, bouclier, ...). On définit alors une région pour chacune de ces parties et une région globae pour l'ensemble du personnage. Cette dernière va servir à détecter les collisions avec les éléments fixes du décor (mor, arbres, rochers, ...) et éléments mobiles inertes (voitures, ...). Les autres servent à détecter une collision entraînant une action (épée du personnage A sur tête du personnage B ==> mort du personnage B, etc). Mais le problème est le déplacement de tout ce système lorsque le personnage se déplace. Alors, au lieu de faire une boucle sur toutes les régions du personnage, il suffit de déplacer le groupe lui étant associé - c'est beaucoup plus simple et surtout beaucoup plus rapide.

Simple mise en garde: avant de quitter un programme utilisant de telles régions, il faut veiller à supprimer toutes les régions créées, ainsi que les éventuels groupes de régions. Pour voir comment faire, regarder le programme de démo dans le post plus haut.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Mar 10 Oct 2017 - 15:08

Nouvelle version:
KGF.dll V7.912du 10/10/2017

Nouveautés:
- Nouvelle fonction: CheckRegionGroupIntersection

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

C'est une fonction très puissante, et elle complète la collection de fonctions gérant les groupes de régions. On peut maintenant tester s'il è a un point commun (contact) entre une région et une région quelconque d'un groupe de régions, ou entre une région quelconque d'un groupe de régions avec une région quelconque d'un autre groupe de régions. De plus, on peut savoir exactement quelles régions sont concernées.

Ceci permet, lors du déplacement d'un personnage décliné en plusieurs régions, de savoir par exemple si sont épée a touché la tête, l'épée ou le bouclier d'un autre personnage. C'est un seul appel d'une fonction DLL qui réalise cela.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: KGF_dll - nouvelles versions   Mar 10 Oct 2017 - 18:49

Nouvelle version:
KGF.dll V7.93 du 10/10/2017

Nouveautés:
- Nouvelle fonction: GetRegionRectangle

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Cette fonction permet de récupérer la position et le dimensions du rectangle englobant une région, quelque soit sa forme.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: KGF_dll - nouvelles versions   

Revenir en haut Aller en bas
 
KGF_dll - nouvelles versions
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 15 sur 15Aller à la page : Précédent  1 ... 9 ... 13, 14, 15
 Sujets similaires
-
» Nouvelles versions éditeur et firmware FR3X
» Nouvelles versions de TC et TP
» Nouvelles versions de TypViewer 4.015 et suivantes
» Deux nouvelles versions de la Porsche 911 (type 991)
» Dacia : La Success Story Continue Avec Quatre Nouvelles Versions Et Séries Limitées

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: