Déplacer, Bloquer, Relacher
Déplacer, Bloquer, Relacher
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.
@++
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 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Déplacer, Bloquer, Relacher
donne ton code qui marche pas. Je pense savoir comment on fait mais je ne sais pas si on parle de la meme chose
http://HexaScrabble.com/
!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.00 - 64 bits
!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.00 - 64 bits
Re: Déplacer, Bloquer, Relacher
Avec un Flag !
@+
Code : Tout sélectionner
if Keyboardpushed(...)<>0 And Flag_Makey = 0
Flag_Makey = 1
Action
endif
if Keyboardpushed(...)=0
Flag_Makey = 0
endif
Re: Déplacer, Bloquer, Relacher
oui désolé je met pas le code sa va aller moins bien
des flags kesako sa
@++
Code : Tout sélectionner
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
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Déplacer, Bloquer, Relacher
chez moi ceci marche ! (sous Linux !)
Code : Tout sélectionner
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
Re: Déplacer, Bloquer, Relacher
on doit pas avoir la même definition du verbe marcherDobro a écrit :chez moi ceci marche ! (sous Linux !)
Avec des flags :
Code : Tout sélectionner
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
Re: Déplacer, Bloquer, Relacher
en effet Dobro ton code plante chez moi aussi
@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
je vais étudier tout cela merci.
@++
@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
je vais étudier tout cela merci.
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Déplacer, Bloquer, Relacher
Regarde. Tu declare ca avant ta boucle :
Et tu fais comme ca. Examine bien le mecanisme :
Code : Tout sélectionner
left.b=0
Code : Tout sélectionner
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
http://HexaScrabble.com/
!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.00 - 64 bits
!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.00 - 64 bits
Re: Déplacer, Bloquer, Relacher
plus court , plus simple :
Tu redefinis en quelque sorte la fonction KeyboardPushed() :
et tu l'utilises :
@+
Tu redefinis en quelque sorte la fonction KeyboardPushed() :
Code : Tout sélectionner
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 : Tout sélectionner
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
@+
Re: Déplacer, Bloquer, Relacher
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 !!
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 : Tout sélectionner
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
Re: Déplacer, Bloquer, Relacher
Sous windows ton code ne fonctionne pas.
Je suis même obliger de faire Ctrl+alt+supp pour quitter
@++
Je suis même obliger de faire Ctrl+alt+supp pour quitter
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Déplacer, Bloquer, Relacher
Avec mon code ?
Re: Déplacer, Bloquer, Relacher
Franchement, ca, c'est tres tres court et ca marche :
Code : Tout sélectionner
If KeyboardPushed(#PB_Key_Left)
If left=0
left=1
Beep_(1000,5)
EndIf
Else
left=0
EndIf
http://HexaScrabble.com/
!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.00 - 64 bits
!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.00 - 64 bits
Re: Déplacer, Bloquer, Relacher
Plus court ma procédure :
tu n'a plus qu'a appeler cette fonction après :
elle fait exactement ceci ( sans le bip bien sur ^^ ):
car tu es obligé d'avoir une variable par touche , ici left...
le code deviendra vite lourd
Code : Tout sélectionner
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
Code : Tout sélectionner
KeyboardPushedEX(Const.i)
Code : Tout sélectionner
If KeyboardPushed(#PB_Key_Left)
If left=0
left=1
Beep_(1000,5)
EndIf
Else
left=0
EndIf
le code deviendra vite lourd
Re: Déplacer, Bloquer, Relacher
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é
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%
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%
http://HexaScrabble.com/
!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.00 - 64 bits
!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.00 - 64 bits