Purecross

Programmation avancée de jeux en PureBasic
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Purecross

Message 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.
Dernière modification par hackotedelaplaque le ven. 07/sept./2007 22:32, modifié 1 fois.
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: StartSpecialFX() - Problème !

Message 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 :)
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message 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.
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message 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...
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: StartSpecialFX() - Problème !

Message par beauregard »

...
Dernière modification par beauregard le mer. 05/sept./2007 16:26, modifié 1 fois.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: StartSpecialFX() - Problème !

Message 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...
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message 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.
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

no problemo

Message 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...
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message 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)...
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message 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... :cry:
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. :D
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

dans le brouillard

Message 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) ?
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message 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().
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message 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!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

petit HS pour DJES :D



vu ton avatar,
Image


il se trouve qu'il y a quelques jours j'ai osé faire ça ! :lol:
http://www.dailymotion.com/Dobro8/video ... hapo_music
:lol: :lol: bien a toi .. :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Dobro a écrit :petit HS pour DJES :D



vu ton avatar,
Image


il se trouve qu'il y a quelques jours j'ai osé faire ça ! :lol:
http://www.dailymotion.com/Dobro8/video ... hapo_music
:lol: :lol: bien a toi .. :)
Je verrai ça dimanche, là je ne peux pas :)
Répondre