Page 1 sur 1
Scrolling avec changement de tuiles en temps réel.
Publié : ven. 03/juin/2011 23:33
par gildev
Dans un
WindowedScreen de 800x600, je fais une boucle dans laquelle je dois ré-afficher en permanence environ 2800
DrawAlphaImage de 16x16. Seulement ce n'est pas fluide si je veux faire un scrolling. Je pense que le choix du
DrawAlphaImage est mauvais et je ne vois pas comment faire autrement.
En fait je souhaite faire un affichage de mes tuiles en temps réel car ils sont modifiés en permanence. Voici un exemple du résultat que je veux obtenir:
http://www.terraria.org Dans la vidéo, vers 1mn 12sec on se rend bien compte de l'effet que je cherche à obtenir qui justifie ce ré-affichage en temps réel.
Si quelqu'un sait je suis preneur.
Re: Scrolling avec changement de tuiles en temps réel.
Publié : ven. 03/juin/2011 23:47
par Atomo
T'as essayé avec des Sprite3D ?
Re: Scrolling avec changement de tuiles en temps réel.
Publié : ven. 03/juin/2011 23:56
par G-Rom
C'est très simple , primo , les sprites 3D , ils profitent du matos , donc de la fluidité , secundo , poste du code , je t'aiderais à l'optimisé.
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 3:49
par Huitbit
Hello,
J'avais commencé un truc qui marchait pas trop mal mais il fallait mettre Directx7 dans les options du compilateur.
http://www.purebasic.fr/french/viewtopi ... oulderdash
http://www.purebasic.fr/french/viewtopi ... oulderdash
C'était en 1024*768 avec des tiles de 16*16 (3072 tiles).
....au lieu d'afficher des milliers de sprites, je change le décor uniquement où il se passe quelque chose
Le problème, c'était l'utilisation de usebuffer().
G-Rom avait proposé GrabSprite comme plan B.
J'avais commencé quelques tests encourageants mais j'ai pas fait de sauvegarde
Je vais essayer de mettre ça à jour (même si on est en pleine fin d'année scolaire

)
Hasta la vista !
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 9:11
par gildev
Merci à vous! Vu que mon code est archi planté car j'ai pété une pile hier soir je le recommence ce matin en utilisant les sprites 3D. Je vous tiens au courant.
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 10:57
par gildev
Je butte sur un autre soucis. J'ai pris l'exemple fourni avec PureBasic sur l’utilisation des sprites3D qui marche nikel en plein écran. J'ai juste remplacé le plein écran par un
OpenWindowedScreen et là le curseur de la souris devient inutilisable.
Code : Tout sélectionner
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Sprite system can't be initialized", 0)
End
EndIf
If InitSprite3D() = 0
MessageRequester("Error", "Sprite3D system can't be initialized correctly", 0)
End
EndIf
;
; Now, open a 640*480 - 16 bits (65000 colours) screen
;
OpenWindow(0,0,0,640,480,"toto")
If OpenWindowedScreen(WindowID(0),0,0,640, 480, 0, 0,0)
; Load our 16 bit sprite (which is a 24 bit picture in fact, as BMP doesn't support 16 bit format)
;
LoadSprite(0, "Data/Geebee2.bmp", #PB_Sprite_Texture)
CreateSprite3D(0, 0)
CreateSprite3D(1, 0)
CreateSprite3D(2, 0)
Sprite3DQuality(1)
TransparentSpriteColor(0, RGB(255, 0, 255)) ; Our pink is transparent :)
Repeat
; Inverse the buffers (the back become the front (visible)... And we can do the rendering on the back)
FlipBuffers()
ClearScreen(RGB(0,50,128))
; Draw our sprite
;
If Start3D()
DisplaySprite3D(0, 0, 30)
DisplaySprite3D(0, x+100, 100, x)
DisplaySprite3D(0, x*2, 100, x)
; Zoom..
;
ZoomSprite3D(1, x, x)
RotateSprite3D(1, x, 0)
DisplaySprite3D (1, 0, 100, x/2)
DisplaySprite3D (1, x*2, 100, x)
DisplaySprite3D (1, 0, 100, x/2)
DisplaySprite3D (1, x*2, 200+x, x)
Stop3D()
EndIf
ExamineKeyboard()
x+1
Until KeyboardPushed(#PB_Key_Escape)
Else
MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf
End
J'ai tenté avec un
Delay(10) dans la boucle mais rien à faire, quelque chose m'échappe...
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 11:05
par G-Rom
InitMouse() & ExamineMouse() ?
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 12:37
par gildev
En fait le curseur hors fenêtre est nikel, mais dès que je le position dans la fenêtre il passe en sablier et devient donc inutilisable.
G-Rom a écrit :InitMouse() & ExamineMouse() ?
Avec ces deux commandes c'est pire: je n'ai plus de souris du tout, même hors fenêtre. J'avais déjà essayé.
Avec
ExamineMouse() je peux afficher un sprite dans la fenêtre à la place du curseur, mais si je sort de la fenêtre je ne peux plus rien faire, donc ça réduit l'intérêt du mode fenêtré de l'application.
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 12:48
par G-Rom
tu libères la souris : ReleaseMouse(1) ?
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 13:36
par gildev
Avec ReleaseMouse(1) ça ne s'arrange pas!
- si je clique gauche le programme ne répond plus et Windows le ferme.
- le curseur reste en sablier quand même (avant que je clique biensûr).
Je sent que ça va être long et chiant.
Je suis sous Windows 7 home 32bits. Et-ce que quelqu'un peut tester avec des OS différents pour voir?
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 13:45
par G-Rom
sur linux , pas de soucis.
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 14:10
par case
il faut un waitwindowevent(0) pour ton problème de souris, n'oublie pas que ton windowed screen est contenu dans une fenêtre, donc il faut gérer ses événements...
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 14:49
par gildev
La bonne nouvelle c'est que ça a réglé le problème de souris, la mauvaise c'est que cette commande bloque ma boucle. Dans l'exemple ci-dessus, si je l'ajoute, l'animation se stoppe que lorsque je bouge la souris.
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 21:42
par case
il faut bien mettre le 0 entre parenthèses sinon ça attend un event ...
waitwindowevent(0) pas waitwindowevent()
Re: Scrolling avec changement de tuiles en temps réel.
Publié : sam. 04/juin/2011 22:11
par gildev
Ha oui mince! Je n'avais pas vu.
Là c'est clair que c'est parfait. C'est exactement comme je voulais.
Encore merci à vous, je vais pouvoir avancer.