zone de texte temps réel dans un jeu !
Nooooon c’était pas un bug , le problème venait des ( ) :
Il faut mettre les ( ) de la procédure aussi et désactiver le >déboguer< :
là ça marche 
MMais j'ai remarqué une chose , les Onerror ne détectent pas toutes les erreurs ??????
ex:
si vous mettez Closescreen() sans avoir ouvert une , y'a pas de message d'érreur !! Bizarre
Il faut mettre les ( ) de la procédure aussi et désactiver le >déboguer< :
Code : Tout sélectionner
Procedure erreur()
MessageRequester("info","erreeeeeeeuuuuuuuuuuuur")
EndProcedure
OnErrorGosub(@erreur())
a = a / 0

MMais j'ai remarqué une chose , les Onerror ne détectent pas toutes les erreurs ??????
ex:
si vous mettez Closescreen() sans avoir ouvert une , y'a pas de message d'érreur !! Bizarre
Là les gens vous êtes dans trip que je n'aurai jamais cru encore exister en 2007!
Quand je pense que j'avais 8 ans, je tournais sous ExcelBasic. C'était un ordi à part assez étrange. Il offrait de la couleur et du scrolling pour les avertis. C'était en 1989. Il était bien. Tu l'allumais et direct... Dans le Basic comme les consoles! Tu pouvais créer tes cartouches mémoire qui s'exécutait aussi vite que ça. Cet ordi s'appelait EXL100.
ça ne dit peut-être pas grand chose. Moi, je n'ai jamais fait de scrolling ni acheté de cartouche mais la commande GOTO... Qu'est-ce que je m'en souviens de cette méchante surtout quand je ne pouvais pas sauver mon programme...
Ensuite, il y a GW-Basic sur un PC 8088 à 4MHz:
Tu remplaces la ligne 20 qui sortait de ta boucle
"90 GOTO 10" et ton programme partait au ciel. Chaque touche qui fait bip et un écran bloqué. T'es obligé de faire Ctrl-Alt-Suppr en pleurant
C'est vrai qu'aujourd'hui, plus rien ne plante si facilement. Plus rien n'est exécuté sans être sauvegardé (sauf les New*) mais la GOTO me reste un peu comme un quelque chose à n'utiliser qu'un dernier recours. Et c'est vraiment rare.
Sinon je rejoins un peu Dobro pour l'ordre des choses. J'ai du mal quand toutes mes "Global", "Declaration", "Procedure" ne sont pas ensemble. Je mettais les procedures en tête il y a quelques jours, jusqu'à ce qu'une procédure en appelle une autre. Là il fallait vraiment déclarer. Et de fil en aiguilles, les procédures ont migrés en bas quand elles ne sont pas encore mises en PBI ou DLL.
Quand je pense que j'avais 8 ans, je tournais sous ExcelBasic. C'était un ordi à part assez étrange. Il offrait de la couleur et du scrolling pour les avertis. C'était en 1989. Il était bien. Tu l'allumais et direct... Dans le Basic comme les consoles! Tu pouvais créer tes cartouches mémoire qui s'exécutait aussi vite que ça. Cet ordi s'appelait EXL100.
ça ne dit peut-être pas grand chose. Moi, je n'ai jamais fait de scrolling ni acheté de cartouche mais la commande GOTO... Qu'est-ce que je m'en souviens de cette méchante surtout quand je ne pouvais pas sauver mon programme...
Ensuite, il y a GW-Basic sur un PC 8088 à 4MHz:
Tu remplaces la ligne 20 qui sortait de ta boucle
"90 GOTO 10" et ton programme partait au ciel. Chaque touche qui fait bip et un écran bloqué. T'es obligé de faire Ctrl-Alt-Suppr en pleurant

C'est vrai qu'aujourd'hui, plus rien ne plante si facilement. Plus rien n'est exécuté sans être sauvegardé (sauf les New*) mais la GOTO me reste un peu comme un quelque chose à n'utiliser qu'un dernier recours. Et c'est vraiment rare.
Sinon je rejoins un peu Dobro pour l'ordre des choses. J'ai du mal quand toutes mes "Global", "Declaration", "Procedure" ne sont pas ensemble. Je mettais les procedures en tête il y a quelques jours, jusqu'à ce qu'une procédure en appelle une autre. Là il fallait vraiment déclarer. Et de fil en aiguilles, les procédures ont migrés en bas quand elles ne sont pas encore mises en PBI ou DLL.
pour la relecture, c'est quand même plus sympath d'avoir les procédures en bas de listing , car sinon sur de gros projet, durant le Scrolling on se colle une bonne centaines de lignes de Procédure avant , d'enfin arriver a la boucle principale !!Ollivier a écrit : Sinon je rejoins un peu Dobro pour l'ordre des choses. J'ai du mal quand toutes mes "Global", "Declaration", "Procedure" ne sont pas ensemble
par définition, les Déclaration génère des lignes moins longues (pas de paramètres qui prenne de la largeur dans l'éditeur), et lorsqu'on arrive a la boucle principal, on s'en rend mieux compte !!

bref plein d'avantage !

nous avions déjà fait un topic sur l'organisation d'un listing

moi j'ai encore mon ZX81 !! déja mis la photo ici

-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
J'ai fait une ou deux modif. Pardonnez-moi si j'ai chamboulé l'architecture. Je ne trouvais pas les Sprites très utiles. Mais il y avait peut-être une raison pour leur présence...
Code : Tout sélectionner
Global Texte$
Declare Graph()
Declare zone_texte(x.l,Y.l,Couleur.l)
Declare.S Curs(ms.L, Char.S = "_")
InitSprite ()
InitKeyboard ()
OpenWindow (0,0,0,300,300, "" )
OpenWindowedScreen ( WindowID (0),0,0,300,300,0,0,0)
Texte$ = "A>"
Repeat
Graph()
FlipBuffers ()
Event = WindowEvent ()
Until Event = #PB_Event_CloseWindow
Procedure zone_texte(x.l,Y.l,Couleur.l)
ExamineKeyboard()
Texte$ = Left(Texte$, Len(Texte$) - KeyboardReleased( #PB_Key_Back ) ) + KeyboardInkey ()
DrawingMode(#PB_2DDrawing_Transparent)
DrawText (x+2,Y+2,texte$ + Curs(500),#Black,0)
DrawText (x,Y,texte$ + Curs(500),Couleur,0)
EndProcedure
Procedure Graph()
StartDrawing ( ScreenOutput ())
xc = 1
yc = 1
For Rayon = 400 To 10 Step -10
Circle (xc, yc, Rayon , RGB ( Random (255), Random (255), Random (255)))
Next Rayon
zone_texte(10,10,#White)
StopDrawing ()
EndProcedure
Procedure.S Curs(ms.L, Char.S = "_")
Static Used.L
Static Start.L
Static CursorStat.B
If Used = 0: Start = ElapsedMilliseconds(): Used = 1: EndIf
If ElapsedMilliseconds() > Start + ms
CursorStat = 1 - CursorStat
Used = 0
EndIf
If CursorStat
ExitChar.S = Char
Else
ExitChar = ""
EndIf
ProcedureReturn ExitChar
EndProcedure
Et comme ça ?

Code : Tout sélectionner
Global MaxText.L
MaxText = 15
Global Dim Texte$(MaxText)
Global Ptr.L
Declare Graph()
Declare zone_texte(x.l,Y.l,Couleur.l)
Declare.S Curs(ms.L, Char.S = "_")
InitSprite ()
InitKeyboard ()
OpenWindow (0,0,0,300,300, "" )
OpenWindowedScreen ( WindowID (0),0,0,300,300,0,0,0)
Texte$(0) = "Ecrit et appuie sur [Entrée]"
Ptr = 1
Repeat
Graph()
FlipBuffers ()
Event = WindowEvent ()
Until Event = #PB_Event_CloseWindow
Procedure zone_texte(x.l,Y.l,Couleur.l)
ExamineKeyboard()
Texte$(Ptr) = Left(Texte$(Ptr), Len(Texte$(Ptr) ) - KeyboardReleased( #PB_Key_Back ) ) + KeyboardInkey ()
If KeyboardReleased(#PB_Key_Return)
Ptr + 1
If Ptr > MaxText
Ptr = MaxText
For i = 0 To MaxText - 1
Texte$(i) = Texte$(i + 1)
Next i
Texte$(MaxText) = ""
EndIf
EndIf
DrawingMode(#PB_2DDrawing_Transparent)
For i = 0 To MaxText
If i = Ptr
DrawText (x+2,Y+2+i*16,texte$(i) + Curs(500),#Black,0)
DrawText (x,Y+i*16,texte$(i) + Curs(500),Couleur,0)
Else
DrawText (x+2,Y+2+i*16,texte$(i),#Black,0)
DrawText (x,Y+i*16,texte$(i),Couleur,0)
EndIf
Next i
EndProcedure
Procedure Graph()
StartDrawing ( ScreenOutput ())
xc = 1
yc = 1
For Rayon = 400 To 10 Step -10
Circle (xc, yc, Rayon , RGB ( Random (255), Random (255), Random (255)))
Next Rayon
zone_texte(10,10,#White)
StopDrawing ()
EndProcedure
Procedure.S Curs(ms.L, Char.S = "_")
Static Used.L
Static Start.L
Static CursorStat.B
If Used = 0: Start = ElapsedMilliseconds(): Used = 1: EndIf
If ElapsedMilliseconds() > Start + ms
CursorStat = 1 - CursorStat
Used = 0
EndIf
If CursorStat
ExitChar.S = Char
Else
ExitChar = ""
EndIf
ProcedureReturn ExitChar
EndProcedure
Bravo >Ollivier< !!
J’aime bien la nouvelle méthode…
Mais pour les sprites que t’a jugé inutiles, ben… leur utilité survient dans un milieu hostile, genre un milieu ou y’a plusieurs couches de sprites , et là le StartDrawing() n’a plus d’effet , car le texte une fois dessiné , avec le FlipBuffer() il disparaît vite , et si ce n’est pas le cas , y’aura des clignotements , donc vaut mieux dessiner sur un sprite puis afficher le sprite à l’écran.
Je dis ça, car sa m’est déjà arriver.

J’aime bien la nouvelle méthode…
Mais pour les sprites que t’a jugé inutiles, ben… leur utilité survient dans un milieu hostile, genre un milieu ou y’a plusieurs couches de sprites , et là le StartDrawing() n’a plus d’effet , car le texte une fois dessiné , avec le FlipBuffer() il disparaît vite , et si ce n’est pas le cas , y’aura des clignotements , donc vaut mieux dessiner sur un sprite puis afficher le sprite à l’écran.
Je dis ça, car sa m’est déjà arriver.

Et si tu affiches ton texte en dernier, ça merdoie toujours??
Parce que là, je m'amusais bien
Parce que là, je m'amusais bien
Code : Tout sélectionner
Global MaxText.L
MaxText = 15
Global Dim Keyb.L(255)
Global Dim KeybStart.L(255)
Global Dim Texte$(MaxText)
Global Ptr.L
Declare Graph()
Declare zone_texte(x.l,Y.l,Couleur.l)
Declare.S Curs(ms.L = 200, Char.S = "_")
Declare.L Keyboard(Touche.L, AttenteIni.L = 500)
InitSprite ()
InitKeyboard ()
LoadFont(0, "Verdana", 12, #PB_Font_Italic| #PB_Font_Bold)
OpenWindow (0,0,0,300,300, "" )
OpenWindowedScreen ( WindowID (0),0,0,300,300,0,0,0)
Texte$(0) = "Ecrit et appuie sur [Entrée]"
Ptr = 1
Repeat
Graph()
FlipBuffers ()
Event = WindowEvent ()
Until Event = #PB_Event_CloseWindow
Procedure zone_texte(x.l,Y.l,Couleur.l)
ExamineKeyboard()
Texte$(Ptr) = Left(Texte$(Ptr), Len(Texte$(Ptr) ) - Keyboard( #PB_Key_Back ) ) + KeyboardInkey ()
If Keyboard(#PB_Key_Return)
Ptr + 1
If Ptr > MaxText
Ptr = MaxText
For i = 0 To MaxText - 1
Texte$(i) = Texte$(i + 1)
Next i
Texte$(MaxText) = ""
EndIf
EndIf
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(0) )
th = TextHeight("A")
For i = 0 To MaxText
If i = Ptr
DrawText (x+2,Y+2+i*th,texte$(i) + Curs(),#Black,0)
DrawText (x,Y+i*th,texte$(i) + Curs(),Couleur,0)
Else
DrawText (x+2,Y+2+i*th,texte$(i),#Black,0)
DrawText (x,Y+i*th,texte$(i),Couleur,0)
EndIf
Next i
EndProcedure
Procedure Graph()
StartDrawing ( ScreenOutput ())
xc = 1
yc = 1
For Rayon = 400 To 10 Step -10
Circle (xc, yc, Rayon , RGB ( Random (255), Random (255), Random (255)))
Next Rayon
zone_texte(10,10,#White)
StopDrawing ()
EndProcedure
Procedure.S Curs(ms.L = 200, Char.S = "_")
Static Used.L
Static Start.L
Static CursorStat.B
If Used = 0: Start = ElapsedMilliseconds(): Used = 1: EndIf
If ElapsedMilliseconds() > Start + ms
CursorStat = 1 - CursorStat
Used = 0
EndIf
If CursorStat
ExitChar.S = Char
Else
ExitChar = ""
EndIf
ProcedureReturn ExitChar
EndProcedure
Procedure.L Keyboard(Touche.L, AttenteIni.L = 500)
Static Used.L
Static Start.L
Static CursorStat.B
Signal = 0
If KeyboardPushed(Touche)
If Keyb(Touche) = 0
Keyb(Touche) = 1
KeybStart(Touche) = ElapsedMilliseconds()
Signal = 1
Else
If ElapsedMilliseconds() > KeybStart(Touche) + AttenteIni
Signal = 1
EndIf
EndIf
Else
Keyb(Touche) = 0
EndIf
ProcedureReturn Signal
EndProcedure
Ptain, foutu sprite qui s'afficha pas
(Il est dans la procedure Graph() )
(Il est dans la procedure Graph() )
Code : Tout sélectionner
Global MaxText.L
MaxText = 15
Global Dim Keyb.L(255)
Global Dim KeybStart.L(255)
Global Dim Texte$(MaxText)
Global Ptr.L
Declare Graph()
Declare zone_texte(x.l,Y.l,Couleur.l)
Declare.S Curs(ms.L = 200, Char.S = "_")
Declare.L Keyboard(Touche.L, AttenteIni.L = 500)
InitSprite ()
InitKeyboard ()
LoadFont(0, "Verdana", 12, #PB_Font_Italic| #PB_Font_Bold)
OpenWindow (0,0,0,300,300, "" )
OpenWindowedScreen ( WindowID (0),0,0,300,300,0,0,0)
Texte$(0) = "Ecrit et appuie sur [Entrée]"
Ptr = 1
Repeat
Graph()
FlipBuffers ()
Event = WindowEvent ()
Until Event = #PB_Event_CloseWindow
Procedure zone_texte(x.l,Y.l,Couleur.l)
ExamineKeyboard()
Texte$(Ptr) = Left(Texte$(Ptr), Len(Texte$(Ptr) ) - Keyboard( #PB_Key_Back ) ) + KeyboardInkey ()
If Keyboard(#PB_Key_Return)
Ptr + 1
If Ptr > MaxText
Ptr = MaxText
For i = 0 To MaxText - 1
Texte$(i) = Texte$(i + 1)
Next i
Texte$(MaxText) = ""
EndIf
EndIf
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(0) )
th = TextHeight("A")
For i = 0 To MaxText
If i = Ptr
DrawText (x+2,Y+2+i*th,texte$(i) + Curs(),#Black,0)
DrawText (x,Y+i*th,texte$(i) + Curs(),Couleur,0)
Else
DrawText (x+2,Y+2+i*th,texte$(i),#Black,0)
DrawText (x,Y+i*th,texte$(i),Couleur,0)
EndIf
Next i
EndProcedure
Procedure Graph()
Static a.L
If a = 0
a = 1
CreateSprite(0, 100, 100)
StartDrawing (SpriteOutput(0))
Box(1, 1, 90, 90, #Red)
StopDrawing()
EndIf
StartDrawing ( ScreenOutput ())
xc = 1
yc = 1
For Rayon = 400 To 10 Step -10
Circle (xc, yc, Rayon , RGB ( Random (255), Random (255), Random (255)))
Next Rayon
DisplaySprite(0, 0, 0)
zone_texte(10,10,#White)
StopDrawing ()
EndProcedure
Procedure.S Curs(ms.L = 200, Char.S = "_")
Static Used.L
Static Start.L
Static CursorStat.B
If Used = 0: Start = ElapsedMilliseconds(): Used = 1: EndIf
If ElapsedMilliseconds() > Start + ms
CursorStat = 1 - CursorStat
Used = 0
EndIf
If CursorStat
ExitChar.S = Char
Else
ExitChar = ""
EndIf
ProcedureReturn ExitChar
EndProcedure
Procedure.L Keyboard(Touche.L, AttenteIni.L = 500)
Static Used.L
Static Start.L
Static CursorStat.B
Signal = 0
If KeyboardPushed(Touche)
If Keyb(Touche) = 0
Keyb(Touche) = 1
KeybStart(Touche) = ElapsedMilliseconds()
Signal = 1
Else
If ElapsedMilliseconds() > KeybStart(Touche) + AttenteIni
Signal = 1
EndIf
EndIf
Else
Keyb(Touche) = 0
EndIf
ProcedureReturn Signal
EndProcedure