Jeu / 2D drawing : zone de texte (tchat, stringgadget...)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Jeu / 2D drawing : zone de texte (tchat, stringgadget...)

Message par blendman »

salut

voici un petit exemple de zone de texte en mode Screen / 2D drawing, donc sans gadget.
C'est un exemple de tchat, mais ça peut être adapté facilement pour un truc style stringgadget pour un jeu (pour écrire son nom ou autre).

Code : Tout sélectionner

; basé sur l'exemple purebasic "KeyboardInkey()

Enumeration ; sprite
  #sprite_PourEcrireTexte
  #sprite_ZoneDeTexte
EndEnumeration


If InitSprite() = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
  End
EndIf
If InitKeyboard() = 0
  MessageRequester("Erreur", "Impossible d'ouvrir le clavier, hou pinaise tu n'as pas de clavier ?? !", 0)
  End
EndIf


; dimension fenêtre et screen
winW = 500
winH = 400
; couleur du tchat
col1 = 100
col2= 150

; un tableau pour afficher les lignes du tchat.
Dim zonetext$(0)
; POur le tchat (pas nécessaire ^^)
PoliceTchat = LoadFont(0, "Arial", 12)


If OpenWindow(0, 0, 0, winW, winH, "Zone de tchat", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
  If OpenWindowedScreen(WindowID(0), 0, 0, winW, winH)
   
    ; on crée le sprite pour écrire
    CreateSprite(#sprite_PourEcrireTexte, winW, 20)
    If StartDrawing(SpriteOutput(#sprite_PourEcrireTexte))
      Box(0, 0, OutputWidth(), OutputHeight(), RGB(Col1, col1, Col1))
      StopDrawing()
    EndIf
   
     ; on crée le sprite pour écrire
    CreateSprite(#sprite_ZoneDeTexte, winW, 150)
    If StartDrawing(SpriteOutput(#sprite_ZoneDeTexte))
      Box(0, 0, OutputWidth(), OutputHeight(), RGB(col2, col2, col2))
      StopDrawing()
    EndIf
   
   
  Else
    MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
    End
  EndIf
EndIf

direction = 2
Repeat
  ; Il est très important de traiter tous les évènements restants dans la file d'attente à chaque tour
  ;
  Repeat
    Event = WindowEvent()
   
    Select Event
       
     
     
      Case #PB_Event_LeftClick
        ; on vérifie si on a cliqué sur le sprite pour écrire
        If WindowMouseY(0)>= winh-20
          ; on peut écrire sur le tchat
          clicEcrire = 1
         
        Else
          clicEcrire = 0 
        EndIf
       
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until Event = 0
 
 
  ; les actions qu'on fait sur le jeu
 
 
  FlipBuffers()
  ClearScreen(RGB(0, 0, 0))
 
  ; on vérifie les actions ici
  If clicEcrire = 1
    ; on vérifie le keyboard
    If ExamineKeyboard()
     
   
      If KeyboardReleased(#PB_Key_Return)
       
        ; on a appuyé sur entrée, on valide le texte
        ; ClicEcrire = 0
       
        zonetext$(ligneTchat) = fulltext$ ; on ajoute un char de fin de chaine.
       
        ; on a ajouté une ligne à notre tableau de ligne de tchat, on incrémente.
        ligneTchat +1
        ReDim zonetext$(ligneTchat)
       
        ; on peut effacer le texte de zone de saisie.
        fulltext$ = ""
       
        ; on met à jour le sprite pour le texte
        If StartDrawing(SpriteOutput(#sprite_PourEcrireTexte))
          Box(0, 0, OutputWidth(), OutputHeight(), RGB(col1, col1, col1))
          DrawingMode(#PB_2DDrawing_Transparent)
         
          StopDrawing()
        EndIf
         
        ; on met le text dans la zone à afficher
        If StartDrawing(SpriteOutput(#sprite_ZoneDeTexte))
         
          Box(0, 0, OutputWidth(), OutputHeight(), RGB(Col2, col2, Col2))
          DrawingMode(#PB_2DDrawing_Transparent)
          DrawingFont(PoliceTchat)

          ; on dessine chaque ligne du tchat
          For i = 0 To ArraySize(zonetext$())
            ; pour connaitre la taille de la police en pixel
            If i = i
              Htext = TextHeight(zonetext$(i))
            EndIf
            ; ensuite, on dessine
            DrawText(0,i*Htext,zonetext$(i))
          Next i
         
          StopDrawing()
        EndIf
       
      Else
       
        If KeyboardReleased(#PB_Key_Back)
          FullText$ = Left(FullText$, Len(FullText$)-1)
        Else
          char$ = KeyboardInkey()
          ; on veirife qu'on a appuyé
          If FindString("1234567890 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzéèçàù.,;:/?!&é(-_)=+#{[|`\^@]}$%", char$)
           
            FullText$ + char$
          EndIf
        EndIf
          ; on met à jour le sprite pour le texte
          If StartDrawing(SpriteOutput(#sprite_PourEcrireTexte))
            Box(0, 0, OutputWidth(), OutputHeight(), RGB(col1, col1, col1))
            DrawingMode(#PB_2DDrawing_Transparent)
            DrawText(0,0,FullText$)
            StopDrawing()
          EndIf
         
        EndIf
       
      EndIf
     
   
  EndIf
 
  ; on affiche
  DisplaySprite(#sprite_ZoneDeTexte, 0, winh-20-SpriteHeight(#sprite_ZoneDeTexte))
  DisplaySprite(#sprite_PourEcrireTexte, 0, winh-20)
  Delay(1)
 
ForEver
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Jeu / 2D drawing : zone de texte (tchat, stringgadget...

Message par Ar-S »

Sympa merci 8)
~~~~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