Scrolling avec changement de tuiles en temps réel.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Scrolling avec changement de tuiles en temps réel.

Message 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. :cry:

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.
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Re: Scrolling avec changement de tuiles en temps réel.

Message par Atomo »

T'as essayé avec des Sprite3D ?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Scrolling avec changement de tuiles en temps réel.

Message 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é.
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Re: Scrolling avec changement de tuiles en temps réel.

Message 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 :mrgreen:

Je vais essayer de mettre ça à jour (même si on est en pleine fin d'année scolaire :mrgreen: )

Hasta la vista !
Elevé au MSX !
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Re: Scrolling avec changement de tuiles en temps réel.

Message 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.
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Re: Scrolling avec changement de tuiles en temps réel.

Message 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...
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Scrolling avec changement de tuiles en temps réel.

Message par G-Rom »

InitMouse() & ExamineMouse() ?
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Re: Scrolling avec changement de tuiles en temps réel.

Message 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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Scrolling avec changement de tuiles en temps réel.

Message par G-Rom »

tu libères la souris : ReleaseMouse(1) ?
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Re: Scrolling avec changement de tuiles en temps réel.

Message 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?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Scrolling avec changement de tuiles en temps réel.

Message par G-Rom »

sur linux , pas de soucis.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Scrolling avec changement de tuiles en temps réel.

Message 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...
ImageImage
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Re: Scrolling avec changement de tuiles en temps réel.

Message 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.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Scrolling avec changement de tuiles en temps réel.

Message par case »

il faut bien mettre le 0 entre parenthèses sinon ça attend un event ...


waitwindowevent(0) pas waitwindowevent()
ImageImage
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Re: Scrolling avec changement de tuiles en temps réel.

Message par gildev »

Ha oui mince! Je n'avais pas vu. :oops:
Là c'est clair que c'est parfait. C'est exactement comme je voulais.
Encore merci à vous, je vais pouvoir avancer.
Répondre