PureBasic

Forums PureBasic
Nous sommes le Ven 24/Mai/2013 9:10

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 30 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 18:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2117
Localisation: . <------ ici
Bonjour,

voilà une chose simple que je n'arrive pas a faire :

j'ai un sprit de 100x100 je souhaiterais le déplacer de 100 en 100 dans l'axe des x

en gros qu'il va de 0 a 800 de 100 en 100. Sa j'y arrive, mais la ou je n'y arrive pas c'est que si je reste appuyer sur la touche du clavier il défile a vitesse rapide :) moi je voudrais un relâchement obligatoire entre 2 action de touches.
j'ai essayé de bidouiller un truck avec KeyboardReleased(IdentifiantTouche) mais sans succees :( .

j'espère m'avoir fait comprendre.






@++

_________________
Windows 8 x64, processeur core i7 2.93ghz, mémoire ram 10Go, 2x ati radeon hd 5750 1Go chacune
PureBasic 5.11 x86 & x64 DirectX 11


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 18:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 2589
donne ton code qui marche pas. Je pense savoir comment on fait mais je ne sais pas si on parle de la meme chose

_________________
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!

http://xmas.free.fr/


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 18:45 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 2135
Avec un Flag ! :D


Code:
if Keyboardpushed(...)<>0 And Flag_Makey = 0
Flag_Makey = 1
Action
endif

if Keyboardpushed(...)=0
Flag_Makey = 0
endif


@+


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 19:03 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2117
Localisation: . <------ ici
oui désolé je met pas le code sa va aller moins bien :D

Code:
Enumeration
#pion
EndEnumeration

If InitKeyboard() = 0 Or InitSprite() = 0
  MessageRequester("Erreur", "Ouverture de sprit impossible", 0)
  End
EndIf

  If OpenScreen(800, 600, 16, "")
   x = 355
   y = 0
   LoadSprite(#pion, "C:/pion.bmp", 0)
  EndIf

  Repeat
    FlipBuffers()
    ClearScreen(RGB(0,0,0))
    ExamineKeyboard()
   
    If KeyboardPushed(#PB_Key_Left)
     If x > 70
      x-5
     EndIf
     If x < 75
      x = 75
     EndIf
    EndIf
   
    If KeyboardPushed(#PB_Key_Right)
     If x = 710
      x = 710
     ElseIf x < 710
      x+5
     EndIf
    EndIf

    If KeyboardPushed(#PB_Key_Down)
      y=510
    EndIf
     DisplaySprite(#pion, x, y)

  Until KeyboardPushed(#PB_Key_Escape)
End   


des flags kesako sa :)







@++

_________________
Windows 8 x64, processeur core i7 2.93ghz, mémoire ram 10Go, 2x ati radeon hd 5750 1Go chacune
PureBasic 5.11 x86 & x64 DirectX 11


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 20:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12954
chez moi ceci marche ! (sous Linux !)
Code:
Enumeration
#pion
EndEnumeration

If InitKeyboard() = 0 Or InitSprite() = 0
  MessageRequester("Erreur", "Ouverture de sprit impossible", 0)
  End
EndIf

  If OpenScreen(800, 600, 16, "")
   x = 355
   y =100
  ; LoadSprite(#pion, "C:/pion.bmp", 0)
  CreateSprite(#pion,100,100)
  StartDrawing(SpriteOutput(#pion))
  Circle(50,50,50)
  StopDrawing()
  EndIf

  Repeat
   
    KeyboardMode(#PB_Keyboard_International)
    ExamineKeyboard()
   
    If KeyboardReleased(#PB_Key_Left)
    x=x-100
    If x<0:x=0:EndIf
    EndIf
   
    If KeyboardReleased(#PB_Key_Right)
    x=x+100
    If x>700:x=700:EndIf
    EndIf

    If KeyboardReleased(#PB_Key_Down)
      y=510
    EndIf
     DisplaySprite(#pion, x, y)
FlipBuffers()
    ClearScreen(RGB(0,0,0))
   
   
  Until KeyboardPushed(#PB_Key_Escape)
   
   
End   

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 20:21 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 2135
Dobro a écrit:
chez moi ceci marche ! (sous Linux !)


on doit pas avoir la même definition du verbe marcher :mrgreen:



Avec des flags :

Code:
Enumeration
#pion
EndEnumeration

If InitKeyboard() = 0 Or InitSprite() = 0
  MessageRequester("Erreur", "Ouverture de sprit impossible", 0)
  End
EndIf

  If OpenScreen(800, 600, 16, "")
   x=300
   y=100
  ; LoadSprite(#pion, "C:/pion.bmp", 0)
  CreateSprite(#pion,100,100)
  StartDrawing(SpriteOutput(#pion))
 
    For r = 1 To 50
      G = r * 255 / 50
      Circle(50,50,50-r,RGB(G,G,G))
    Next
 
  StopDrawing()
  EndIf

  KeyboardMode(#PB_Keyboard_International)
  Repeat
    ClearScreen(0)
    ExamineKeyboard()
   
    If KeyboardPushed(#PB_Key_Left)  And flag_left = 0
      flag_left = 1
      x-100
      If x<0:x=0:EndIf
    EndIf
   
    If KeyboardPushed(#PB_Key_Left)=0  And flag_left = 1
      flag_left = 0
    EndIf
   
   
    If KeyboardPushed(#PB_Key_Right) And flag_right = 0
      flag_right = 1
      x+100
      If x>700:x=700:EndIf
    EndIf
   
    If KeyboardPushed(#PB_Key_Right)=0 And flag_right = 1
      flag_right = 0
    EndIf
   
    If KeyboardPushed(#PB_Key_Down) And flag_down = 0
      flag_down = 1
      y+100
      If y>500 : y=500 : EndIf
    EndIf
   
    If KeyboardPushed(#PB_Key_Down)=0 And flag_down = 1
      flag_down = 0
    EndIf
   
    If KeyboardPushed(#PB_Key_Up) And flag_up = 0
      flag_up = 1
      y-100
      If y<0 : y=0 : EndIf
    EndIf
   
    If KeyboardPushed(#PB_Key_Up)=0 And flag_up = 1
      flag_up = 0
    EndIf
   
     DisplaySprite(#pion, x, y)
     
     FlipBuffers()

   
  Until KeyboardPushed(#PB_Key_Escape)
   
   
End   


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 20:39 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2117
Localisation: . <------ ici
en effet Dobro ton code plante chez moi aussi :wink:

@G-Rom
Merci pour ton exemple je rechercher effectivement ce genre de réponse.
Pourtant le code de Dobro est beaucoup plus court et d'après lui sa fait le même :)

Bref je ne suis pas la pour sa. n'empêche que je voyer sa plus court quand même genre une fonction lier a purebaisc par exemple :P

je vais étudier tout cela merci.






@++

_________________
Windows 8 x64, processeur core i7 2.93ghz, mémoire ram 10Go, 2x ati radeon hd 5750 1Go chacune
PureBasic 5.11 x86 & x64 DirectX 11


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 20:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 2589
Regarde. Tu declare ca avant ta boucle :
Code:
left.b=0
 


Et tu fais comme ca. Examine bien le mecanisme :
Code:
   If KeyboardPushed(#PB_Key_Left)
      If left=0
        left=1
        If x > 70
        x-5
        EndIf
        If x < 75
        x = 75
        EndIf
      EndIf
    Else
      left=0
    EndIf
 

_________________
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!

http://xmas.free.fr/


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 20:57 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 2135
plus court , plus simple :

Tu redefinis en quelque sorte la fonction KeyboardPushed() :

Code:
Global NewMap KeyFlag.b()

Procedure.b KeyboardPushedEX(Const.i)
  If KeyboardPushed(Const) And KeyFlag(Str(Const)) = 0
    KeyFlag(Str(Const)) = 1
    ProcedureReturn #True
  EndIf
  If KeyboardPushed(Const)=0 And KeyFlag(Str(Const)) = 1
    KeyFlag(Str(Const)) = 0
  EndIf
  ProcedureReturn #False
EndProcedure



et tu l'utilises :

Code:
Enumeration
#pion
EndEnumeration

Global NewMap KeyFlag.b()

Procedure.b KeyboardPushedEX(Const.i)
  If KeyboardPushed(Const) And KeyFlag(Str(Const)) = 0
    KeyFlag(Str(Const)) = 1
    ProcedureReturn #True
  EndIf
  If KeyboardPushed(Const)=0 And KeyFlag(Str(Const)) = 1
    KeyFlag(Str(Const)) = 0
  EndIf
  ProcedureReturn #False
EndProcedure




If InitKeyboard() = 0 Or InitSprite() = 0
  MessageRequester("Erreur", "Ouverture de sprit impossible", 0)
  End
EndIf

  If OpenScreen(800, 600, 16, "")
   x=300
   y=100
  ; LoadSprite(#pion, "C:/pion.bmp", 0)
  CreateSprite(#pion,100,100)
  StartDrawing(SpriteOutput(#pion))
 
    For r = 1 To 50
      G = r * 255 / 50
      Circle(50,50,50-r,RGB(G,G,G))
    Next
 
  StopDrawing()
  EndIf

  KeyboardMode(#PB_Keyboard_International)
  Repeat
    ClearScreen(0)
    ExamineKeyboard()
   
    If KeyboardPushedEX(#PB_Key_Left)
      flag_left = 1
      x-100
      If x<0:x=0:EndIf
    EndIf
   
    If KeyboardPushedEX(#PB_Key_Right)
      flag_right = 1
      x+100
      If x>700:x=700:EndIf
    EndIf
   
    If KeyboardPushedEX(#PB_Key_Down)
      flag_down = 1
      y+100
      If y>500 : y=500 : EndIf
    EndIf

    If KeyboardPushedEX(#PB_Key_Up)
      flag_up = 1
      y-100
      If y<0 : y=0 : EndIf
    EndIf
   
   
     DisplaySprite(#pion, x, y)
     
     FlipBuffers()

   
  Until KeyboardPushed(#PB_Key_Escape)
   
   
End   



@+ :wink:


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mar 01/Juin/2010 23:48 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12954
non non ! rectification le code que j'ai posté fonctionne bien sous Linux ! :)

au debut j'avais pensé a un bug, mais c'est parceque j'avais laissé Pushed a la touche left !
mais j'ai corrigé , en mettant tout en released , ça marche bien ... (j'avais réédité mon code.. ;) )

ce code fonctionne sous Linux !!

Code:
Enumeration
#pion
EndEnumeration

If InitKeyboard() = 0 Or InitSprite() = 0
  MessageRequester("Erreur", "Ouverture de sprit impossible", 0)
  End
EndIf

  If OpenScreen(800, 600, 16, "")
   x = 355
   y =100
  ; LoadSprite(#pion, "C:/pion.bmp", 0)
  CreateSprite(#pion,100,100)
  StartDrawing(SpriteOutput(#pion))
  Circle(50,50,50)
  StopDrawing()
  EndIf

  Repeat
   
    KeyboardMode(#PB_Keyboard_International)
    ExamineKeyboard()
   
    If KeyboardReleased(#PB_Key_Left)
    x=x-100
    If x<0:x=0:EndIf
    EndIf
   
    If KeyboardReleased(#PB_Key_Right)
    x=x+100
    If x>700:x=700:EndIf
    EndIf

    If KeyboardReleased(#PB_Key_Down)
      y=510
    EndIf
     DisplaySprite(#pion, x, y)
FlipBuffers()
    ClearScreen(RGB(0,0,0))
   
   
  Until KeyboardPushed(#PB_Key_Escape)
   
   
End   

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mer 02/Juin/2010 5:37 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2117
Localisation: . <------ ici
Sous windows ton code ne fonctionne pas.
Je suis même obliger de faire Ctrl+alt+supp pour quitter :D









@++

_________________
Windows 8 x64, processeur core i7 2.93ghz, mémoire ram 10Go, 2x ati radeon hd 5750 1Go chacune
PureBasic 5.11 x86 & x64 DirectX 11


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mer 02/Juin/2010 7:39 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 2135
Avec mon code 8O ?


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mer 02/Juin/2010 7:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 2589
Franchement, ca, c'est tres tres court et ca marche :
Code:
   If KeyboardPushed(#PB_Key_Left)
      If left=0
        left=1
        Beep_(1000,5)
      EndIf
    Else
      left=0
    EndIf

_________________
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!

http://xmas.free.fr/


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mer 02/Juin/2010 8:26 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 2135
Plus court ma procédure :

Code:
Global NewMap KeyFlag.b()

Procedure.b KeyboardPushedEX(Const.i)
  If KeyboardPushed(Const) And KeyFlag(Str(Const)) = 0
    KeyFlag(Str(Const)) = 1
    ProcedureReturn #True
  EndIf
  If KeyboardPushed(Const)=0 And KeyFlag(Str(Const)) = 1
    KeyFlag(Str(Const)) = 0
  EndIf
  ProcedureReturn #False
EndProcedure


tu n'a plus qu'a appeler cette fonction après :

Code:
KeyboardPushedEX(Const.i)


elle fait exactement ceci ( sans le bip bien sur ^^ ):

Code:
If KeyboardPushed(#PB_Key_Left)
      If left=0
        left=1
        Beep_(1000,5)
      EndIf
    Else
      left=0
    EndIf


car tu es obligé d'avoir une variable par touche , ici left...
le code deviendra vite lourd :)


Haut
 Profil  
 
 Sujet du message: Re: Déplacer, Bloquer, Relacher
MessagePosté: Mer 02/Juin/2010 8:33 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 2589
Il y a une legere difference G-rom : mon code fait un seul test par boucle. Le tiens en fait 2 (4 meme !) constament. J'AIIIIIIME les choses optimisé :wink:

C'est une broutille hein, mais j'arrive pas a me séparer du mot "rapidité" a chaque fois que je code :!:

edit : je viens de faire des tests et ma routine est plus rapide de peut etre 20%

_________________
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!

http://xmas.free.fr/


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 30 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google Adsense [Bot] et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye