Page 1 sur 3
Purecross
Publié : mar. 04/sept./2007 17:43
par hackotedelaplaque
Bonjour à tous,
J'ai un nouveau petit projet en préparation.
Je bute (déjà) sur un problème d'effets 2D.
Vous savez peut-être déjà que j'ai une config toute pourrie (Athlon 600Mh - Nvidia Geforce 256).
Je veux afficher des sprites transparents avec la fonction DisplayTranslucendsprite().
Conformément à la doc, je charge mon sprite avec le flag #PB_Sprite_Memory.
Ca marche mais c'est atrocement lent !!
J'ai lu dans l'aide que placer cette fonction dans un bloc "StartSpecialFX() - StopSpecialFX()" est sensé accélérer énormément l'affichage ...
Dans mon cas 3 problèmes :
1 - c'est encore plus lent voire ça plante l'application ! (pas de messages au niveau du débuger).
2 - les autres sprites appelés ailleurs avec simplement DisplaySprite() ne s'affichent plus du tout.
3 - les gadgets de la fenêtre ne s'affichent plus non plus.
Avez-vous déjà manipulé SpecialFX ?
Merci de votre aide.
Re: StartSpecialFX() - Problème !
Publié : mar. 04/sept./2007 18:09
par Backup
hackotedelaplaque a écrit :
J'ai lu dans l'aide que placer cette fonction dans un bloc "StartSpecialFX() - StopSpecialFX()" est sensé accélérer énormément l'affichage ...
je pense meme que c'est indispensable pour que ça marche, a confirmer !!
Avez-vous déjà manipulé SpecialFX ?
Merci de votre aide.
oui ! aucun problèmes chez moi

Publié : mar. 04/sept./2007 21:19
par hackotedelaplaque
je pense meme que c'est indispensable pour que ça marche, a confirmer !!
Nop' ça marche sans. hormis la lenteur. Par contre il faut le flag #PB_Sprite_Memory.
Publié : mer. 05/sept./2007 8:31
par djes
Fais-nous voir (une partie de) ton code, pour que nous voyions l'ordre des opérations (c'est très important).
Comme ces effets sont réalisés par le CPU, n'espère pas afficher 1000 sprites de 512x512 en haute déf à 85 imgs/s...
Re: StartSpecialFX() - Problème !
Publié : mer. 05/sept./2007 16:20
par beauregard
...
Re: StartSpecialFX() - Problème !
Publié : mer. 05/sept./2007 16:25
par beauregard
hackotedelaplaque a écrit :
Avez-vous déjà manipulé SpecialFX ?
Merci de votre aide.
oui, testé cet été, et la conclusion c'est d'utiliser les sprite3D pour la transparence. Mais il est biensûr possible de ce passer des sprite3D, mais dans ce cas il faut limiter ses ambitions.
le lien avec un code où tu trouveras peut être ton bonheur:
http://www.purebasic.fr/french/viewtopic.php?t=6837
Puis dobro a savamment modifié mon code afin de démontrer la puissance des sprites3D.
Une petite carte3D avec 64Mo comme la mienne coûte environs 25 euros...
Publié : mer. 05/sept./2007 17:45
par hackotedelaplaque
Le source est ici
http://hackotedelaplaque.free.fr/Purecross.zip
J'ai enlevé le bloc StartSpecialFX()/StopSpecialFX() dans lequel je plaçais mon displaytranslucendsprite() vu que chez moi ça ramait et qu'à cause de ça mon sprite de fond (un classique displaysprite) et les gadgets ne s'affichaient plus.
J'ai testé ton source et celui de Dobro. Incontestablement les sprites 3D valent le détour. Je vais passer aux sprite3D.
Reste que je n'arrive toujours pas à comprendre pourquoi mon code ne marche pas ? Et je lache pas l'affaire tant que je saurais pas.
Autre question vu que vous avez le source :
je libère la souris quand le curseur quitte l'écran (sur la droite uniquement à l'heure actuelle) pour manipuler les gadgets. Mais comment la réacquérir sur l'écran courant ?
Merci à vous.
no problemo
Publié : mer. 05/sept./2007 23:51
par beauregard
hackotedelaplaque a écrit :J'ai enlevé le bloc StartSpecialFX()/StopSpecialFX() dans lequel je plaçais mon displaytranslucendsprite() vu que chez moi ça ramait et qu'à cause de ça mon sprite de fond (un classique displaysprite) et les gadgets ne s'affichaient plus.
l'image de la jeune femme en costume traditionnel s'affiche sans problème sur mon vieux PC, et je peux redimensioner les grilles...
Publié : mer. 05/sept./2007 23:55
par beauregard
hackotedelaplaque a écrit :je libère la souris quand le curseur quitte l'écran (sur la droite uniquement à l'heure actuelle) pour manipuler les gadgets. Mais comment la réacquérir sur l'écran courant ?
à mon avis, ça choquera personne, mais je ne peux pas t'aider car par manque de temps, j'ai étudié purebasic uniquement en mode graphique( plein écran)...
Publié : jeu. 06/sept./2007 9:16
par hackotedelaplaque
l'image de la jeune femme en costume traditionnel s'affiche sans problème sur mon vieux PC, et je peux redimensioner les grilles...
Tu as rajouté le bloc SpecialFX et ça marche ?
Donc le code est bon et on peut définitvement dire que c'est un problème de matériel chez moi ?
Mon problème de souris est très embettant car sans lui je fais rien !!
En fait il s'agit d'un remake de Picross. Un jeu japonais (hanjie) genre sudoku mais où il faut dessiner. Sans souris, aucun intérêt. Mais si je libère pas la souris avec releasemouse(1) alors je peux pas "sortir de l'écran" pour toucher les gadgets ou menus. Et après mon release, si je reviens sur l'écran j'ai perdu l'acquisition de la souris...
Je me doute qu'il faut utiliser ReleaseMouse(0) mais comment ? c'est bien le problème...
[EDIT] je me rends compte que c'est pas clair mon histoire de souris. Enlevez l'instruction Releasemouse(0) et bougez la souris vous allez tout de suite comprendre...
Merci de ton aide en tout cas.

dans le brouillard
Publié : jeu. 06/sept./2007 16:46
par beauregard
hackotedelaplaque a écrit :
Tu as rajouté le bloc SpecialFX et ça marche ?
Je n'ai rien rajouté du tout.
Et d'ailleurs je ne vois ni StartSpecialFX() et encore moins DisplayTransparentSprite...
...maintenant si ce bloc existe( j'imagine des lignes de codes désactivés), et bien peux tu préciser dans quel code tu l'a placé (y a 3 codes) ?
Publié : jeu. 06/sept./2007 17:34
par hackotedelaplaque
Et d'ailleurs je ne vois ni StartSpecialFX()
non ça ne figure pas justement, si je le met plus rien ne marche !
Le source principal c'est purecross.pb.
Ce n'est pas DisplayTransparentSprite() mais DisplayTranslucendSprite().
Lignes 167, 173, et 177.
Normalement pour un usage plus rapide, ces instructions doivent être comprises entre un StartSpecialFX() et un StopSpecialFX().
Publié : ven. 07/sept./2007 11:10
par djes
Le "displaysprite" se met normalement après le stopspecialfx, mais ici comme tu t'en sers pour effacer le fond, tu peux le mettre après le startspecialfx. Essaye plutôt d'utiliser des sprites 3d pour les objets translucides, avec une couche alpha ou avec un blending 5,7;
d'autant plus que tes blocs sont carrés!
Si tu tiens vraiment à faire une appli fenêtrée, soit tu utilises les gadgets de windows, soit tu fais en sorte que toute ta fenêtre soit en screen, tu seras moins ennuyé ; ou alors utilise les windowmousex() windowmousey(). Et pouquoi pas une deuxième fenêtre pour les gadgets...
Il y a dans codearchiv et sur les forums des exemples et des fonctions pour palier aux faiblesses de isscreenactive(). Place des debug pour voir le résultat des fonctions, observe leur comportement quand tu bouges la souris, tu finiras bien par trouver le truc!
Publié : ven. 07/sept./2007 12:26
par Backup
petit HS pour DJES
vu ton avatar,
il se trouve qu'il y a quelques jours j'ai osé faire ça !
http://www.dailymotion.com/Dobro8/video ... hapo_music

bien a toi ..

Publié : ven. 07/sept./2007 12:42
par djes
Je verrai ça dimanche, là je ne peux pas
