Sélection d'un sprite avec la souris

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Sélection d'un sprite avec la souris

Message par bombseb »

Bonjour,

Une petite question, j'aimerais savoir sur quel sprite j'ai cliqué.... Comment dois-je faire ?
Faire une bidouille avec SpritePixelCollision ?
J'affiche mes sprites en question avec DisplayTransparentSprite. Je ne peux donc pas faire un test des coordonnées de la souris car les pixels au bord de mes sprites sont transparents...

Merci pour votre aide car là je sèche un peu...
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: Sélection d'un sprite avec la souris

Message par case »

tu connais la position de tes sprites donc tu peux tester les coordonnes de la souris et du sprite pour voir si la souris est dans le sprite si tu veux un truc plus precis tu peux definir des hitbox sur le sprite et tester si la souris est dedans.
ImageImage
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Sélection d'un sprite avec la souris

Message par Cool Dji »

Hello BomSeb,

[Edit] Un truc du genre
Si tu as 5 sprites, tu les déclares de 1 à 5.

Code : Tout sélectionner

InitSprite()
InitMouse()
InitKeyboard()


;----- Ouvre un Screen Plein écran
ExamineDesktops()
ScreenWidth=DesktopWidth(0)
ScreenHeight=DesktopHeight(0)

OpenScreen(ScreenWidth, ScreenHeight, 32, "")

;-- creation du sprite n°1 de la souris 
CreateSprite(1,10,10,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(1))
Circle(5,5,5,RGB(255,255,255))
StopDrawing() 
TransparentSpriteColor(1,RGB(0,0,0))

;-- creation de 4 sprites à tester
For j=2 To 5
CreateSprite(j,100,100,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(j))
Circle(50,50,50,RGB(255,0,0))
StopDrawing() 
TransparentSpriteColor(j,RGB(0,0,0))
Next

Global Dim SpriteX(5), Dim SpriteY(5)
For j=2 To 5
  SpriteX(j)=Random(500)
  SpriteY(j)=Random(500)
Next

;-- Boucle principale
Repeat
  ExamineKeyboard()
  ExamineMouse()
  ClearScreen(RGB(150,150,150))
  
 ; test tous les 4 sprites les uns après les autres, sachant que le sprite n°1 est la souris 
 For j=2 To 5
  If SpritePixelCollision(1,MouseX(),MouseY(),j,SpriteX(j),SpriteY(j)) ; tu test tous les sprites avec celui de la souris tu peux ajouter une condition du clicj gauche ici aussi
   ; c'est le sprite n°j qui est en contact avec la souris représenté par le sprite n°1
    ; si contact, change les coordonnées du sprite touché
    SpriteX(j)=Random(500)
  SpriteY(j)=Random(500)
   
EndIf
;- Affiche les 4 sprites 
DisplayTransparentSprite(j,SpriteX(j),SpriteY(j),255)
Next

;- affiche le sprite de la souris
DisplayTransparentSprite(1,MouseX(),MouseY(),255)



 FlipBuffers()
  
Until KeyboardPushed(#PB_Key_Escape)

Only PureBasic makes it possible
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Sélection d'un sprite avec la souris

Message par Kwai chang caine »

@CoolDji
Ca énerve ton truc :mrgreen:
Merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Sélection d'un sprite avec la souris

Message par Cool Dji »

Salut KCC,

T'aurait vite fait de rendre cinglé un chat avec un truc comme ça sur une tablette... :D
Only PureBasic makes it possible
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Sélection d'un sprite avec la souris

Message par Kwai chang caine »

T'as raison...et vite fait d'aller en racheter une autre :lol:
Remarque si t'as un pote qui a un chat qui t’énerve.....allez hop, lance le giciel pose la tablette au bord de la fenêtre et.......... :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Sélection d'un sprite avec la souris

Message par Micoute »

Je ne comprends pas pourquoi ça ne fonctionne pas sur mon ordi.

Ca me fait une page grise qui se ferme quand je presse la touche Echap, mon sous système est OpenGL.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: Sélection d'un sprite avec la souris

Message par bombseb »

Cool, merci pour votre aide,

Donc oui soit je teste les coordonnées de la souris, soit je créé un sprite "pointeur de souris" puis je teste les collisions avec les autres sprites...C'est bien ce que je pensais...
Je me disait qu'il y avait peut être plus simple...
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Sélection d'un sprite avec la souris

Message par SPH »

bombseb a écrit :Cool, merci pour votre aide,

Donc oui soit je teste les coordonnées de la souris, soit je créé un sprite "pointeur de souris" puis je teste les collisions avec les autres sprites...C'est bien ce que je pensais...
Je me disait qu'il y avait peut être plus simple...
si tu as des sprites carrés, tu peux "tricher". C'est ce que j'ai fait dans mon jeu de scrabble. Je ne teste aucune collision entre sprites (avec la version officielle) 8)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Sélection d'un sprite avec la souris

Message par Ar-S »

De toutes façon y'a pas 36 solutions.
Soit le programme compare les coordonnées de différents sprites et si elles se rencontrent => touché mais ça limite la forme des sprites. ça ça marche bien dans des jeux avec "des cases" (SPH) ou pour faire des GUI graphiques sympas. Mais pour du sprite animé ou ayant des formes, pixelcollision est fait pour ça.
Tu pourrais aussi utiliser un Point(X, Y) et comparer la couleur à celle du fond mais c'est une peu se compliquer la vie pour rien ^^
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre