Problème de rafraichissement

Résolu
tidds Messages postés 246 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 9 janvier 2006 - 26 oct. 2004 à 19:11
tidds Messages postés 246 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 9 janvier 2006 - 26 oct. 2004 à 21:35
Bonjour à tous,

J'ai décidé de recoder ma dernière source (Matrix) entièrement.
Le code, bien que non terminé, est maintenant beaucoup plus lisible.

Cependant j'ai un gros problème de rafraichissement de l'image...
Si quelqu'un pouvait me venir en aide, je lui serait éternellement reconnaissant ! :]

menu * { 
  - 
  Matrix:matrix 
}

alias matrix {

  ; ### Creation pw ###

  if ($window(@Matrix)) { window -c @Matrix }
  window -CkBpdho +tL @Matrix 0 0 640 480
  drawrect -f @Matrix 1 0 0 0 640 480

  ; ### Initialisation htables ###

  var %i = 1
  while (%i <= 30) {
    if ($hget(tab $+ [ %i ])) { hfree tab $+ [ %i ] }
    hmake tab $+ [ %i ] 30
    hadd tab $+ [ %i ] %i $rand(A,Z)
    hadd tab $+ [ %i ] v $rand(2,10)
    hadd tab $+ [ %i ] y
    inc %i
  }

  ; Boucle principale
  .timer -m 1 0 matrix.loop
}

alias -l matrix.alias {
  hadd $1 y $calc($hget($1,y) + $hget($1,v))
  if ($hget($1,y) > $rand(750,800)) {
    hadd $1 y 0
    var %i = 1
    while (%i <= 30) {
      hadd $1 %i $rand(A,Z)
      inc %i
    }
    hadd $1 v $rand(2,10)
  }
  var %j = 1
  while (%j <= 30) {
    if (%j == 1) { drawtext -ro @matrix $rgb(200,255,200) Verdana 12 $2 $calc($hget($1,y) - (%j * 10)) $rand(A,Z) }
    else { drawtext -ro @matrix $rgb(0,$calc(255 - (%j * 5)),0) Verdana 12 $2 $calc($hget($1,y) - (%j * 10)) $rand(A,Z) }
    ;drawdot @matrix
    inc %j
  }
}

alias -l matrix.loop {
  drawrect -f @Matrix 1 0 0 0 640 480
  var %i 1, %y -12
  while (%i <= 12) {
    %y = %y + 12
    matrix.alias tab $+ [ %i ] %y
    inc %i
  }
  %y = -12
  .timer -m 1 0 matrix.loop
}

menu @matrix {
  sclick { window -c @matrix }
}

5 réponses

cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 8
26 oct. 2004 à 19:28
Bonsoir,

Il te suffit d'utiliser l'attribut -n et de faire un drawdot afin d'éviter de rafraichir autant de fois ton image.

Code modifié :

menu * { 
  - 
  Matrix:matrix 
}

alias matrix {

  ; ### Creation pw ###

  if ($window(@Matrix)) { window -c @Matrix }
  window -CkBpdho +tL @Matrix 0 0 640 480
  drawrect -f @Matrix 1 0 0 0 640 480

  ; ### Initialisation htables ###

  var %i = 1
  while (%i <= 30) {
    if ($hget(tab $+ [ %i ])) { hfree tab $+ [ %i ] }
    hmake tab $+ [ %i ] 30
    hadd tab $+ [ %i ] %i $rand(A,Z)
    hadd tab $+ [ %i ] v $rand(2,10)
    hadd tab $+ [ %i ] y
    inc %i
  }

  ; Boucle principale
  .timer -m 1 0 matrix.loop
}

alias -l matrix.alias {
  hadd $1 y $calc($hget($1,y) + $hget($1,v))
  if ($hget($1,y) > $rand(750,800)) {
    hadd $1 y 0
    var %i = 1
    while (%i <= 30) {
      hadd $1 %i $rand(A,Z)
      inc %i
    }
    hadd $1 v $rand(2,10)
  }
  var %j = 1
  while (%j <= 30) {
    if (%j == 1) { drawtext -ron @matrix $rgb(200,255,200) Verdana 12 $2 $calc($hget($1,y) - (%j * 10)) $rand(A,Z) }
    else { drawtext -ro @matrix $rgb(0,$calc(255 - (%j * 5)),0) Verdana 12 $2 $calc($hget($1,y) - (%j * 10)) $rand(A,Z) }
    ;drawdot @matrix
    inc %j
  }
}

alias -l matrix.loop {
  drawrect -fn @Matrix 1 0 0 0 640 480  var %i 1, %y -12
  while (%i <= 12) {
    %y = %y + 12
    matrix.alias tab $+ [ %i ] %y
    inc %i
  }
  %y = -12
  .timer -m 1 0 matrix.loop
  drawdot @matrix
}

menu @matrix {
  sclick { window -c @matrix }
}

-<gras>[ Sorn_Drixer ]-</gras>
-
:question) Vous pouvez me retrouver sur irc.rs2i.net:6667

:question) Mon site : Sorn-Creation
3
cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 8
26 oct. 2004 à 21:02
Niveau fluidité, maintenant c'est parfait.

Si tu veux encore un peu optimiser ton code, tu pourrais éventuellement répéter certaines colonnes, par exemple :
tu crées 6 types de colonne (+ ou - à toi de voir), tu enregistres leur modèle. (lettres qui vont défiler, couleurs, etc)
Et une fois ces 6 types défilés à l'écran, tu les réaffiches, comme ca, pas besoin de recalculer de nouvelles colonnes.
-<gras>[ Sorn_Drixer ]-</gras>
-
:question) Vous pouvez me retrouver sur irc.rs2i.net:6667

:question) Mon site : Sorn-Creation
3
tidds Messages postés 246 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 9 janvier 2006
26 oct. 2004 à 19:53
Mais bien sûr !!
J'avais essayé de faire le -n + drawdot un peu plus haut en fait...

Merci beaucoup Sorn_Drixer :]
0
tidds Messages postés 246 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 9 janvier 2006
26 oct. 2004 à 20:07
Y aurait-il moyen d'optimiser encore plus la vitesse d'affichage ?

J'ai modifié cette partie :

alias -l matrix.alias {
hadd $1 y $calc($hget($1,y) + $hget($1,v))
if ($hget($1,y) > $rand(750,800)) {
hadd $1 y 0
var %i = 1
while (%i <= 30) {
hadd $1 %i $rand(A,Z)
inc %i
}
hadd $1 v $rand(2,10)
}
var %j = 1
while (%j <= 30) {
if (%j == 1) { drawtext -ron @matrix $rgb(200,255,200) Verdana 12 $2 $calc($hget($1,y) - (%j * 10)) $rand(A,Z) }
else { drawtext -ro @matrix $rgb(0,$calc(255 - (%j * 5)),0) Verdana 12 $2 $calc($hget($1,y) - (%j * 10)) $rand(A,Z) }
inc %j
}
}

(...)

%y = -12
.timer -m 1 0 matrix.loop
drawdot @matrix
}


par celle-la :

alias -l matrix.alias {
hadd $1 y $calc($hget($1,y) + $hget($1,v))
if ($hget($1,y) > $rand(750,800)) {
hadd $1 y 0
var %i = 1
while (%i <= 30) {
hadd $1 %i $rand(A,Z)
inc %i
}
hadd $1 v $rand(2,10)
}
drawtext -ron @matrix $rgb(200,255,200) Verdana 12 $2 $calc($hget($1,y) - (%j * 10)) $rand(A,Z) 
var %j = 2
while (%j <= 30) {
drawtext -ro @matrix $rgb(0,$calc(255 - (%j * 5)),0) Verdana 12 $2 $calc($hget($1,y) - (%j * 10)) $rand(A,Z)
inc %j
}
}

(...)

%y = -12
.timer -m 1 0 matrix.loop
drawdot @matrix
%j = 1
}


J'ai gagné ainsi quelques millisecondes... :D

Cependant ca fait beaucoup de boucles par millisecondes (2*30 = 60 boucles/milliseconde pour 30 colonnes... je comptais en mettre plus ! :s) donc je ne sais pas si ca sera encore plus optimisable... :/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tidds Messages postés 246 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 9 janvier 2006
26 oct. 2004 à 21:35
Excellente suggestion, merci :)
0
Rejoignez-nous