Les pointeurs for newbie

Signaler
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
-
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
-
Salut tout le monde,
j'ai comme projet avec plusieurs personnes de mon école de créer un petit jeu en 3D à l'aide de C#. Mais en essayant de manipuler les pointeurs (ce qui est une quasi obligation pour les jeux) j'ai vu que c'était un vrai casse tête avec des unsafe partout et un problème pour faire des pointeurs d'objets managés (?).
En gros :
class toto
{
toto *zaza = this; //Interdit
}
J'ai plein d'erreurs partout. Ce qui me fais penser que C# n'est pas vraiment fait pour faire du pointeur !!!
Si quelqu'un peut m'aider sur les pointeurs je suis tout ouie !!!! :big)
Merci

10 réponses

Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

premiere chose, la prochaine fois ne fait qu'un post,
tu n'obtiendras pas plus vite ta reponse si tu post 10 fois la meme question!

deuxiememt:
essai:
class toto
{
toto zaza = this;
}


je t'assure ca marche ;)
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

Désolé mais étant donné certaines réponses pas immédiates du serveur CS ça arrive parfois de mettre 2 messages... (sur plus de 300 messages ça m'est arrivé que 2 ou 3 fois...)
Etant donné ta réponse rapide je vois que de toutes manières on a pas besoin de ça !

Pour revenir à notre sujet, zaza n'est pas un pointeur mais une référence donc ça marche mais ca ne résoud pas vraiment mon problème de pointeur....snifff :dissapprove)
Mais le mécanisme est similaire et donc je vais essayer de refaire mon code avec les références.

Au fait comment fais-tu pour mettre ton code en grisé dans ton message ?

Merci qd même
@+
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

regarde les boutons (tous) sous la fenetre de reponse au messages :big)
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

OK merci
Messages postés
33
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
22 octobre 2007

moi, j'a iabsolument besoin des pointeurs car les fonctions de opengl ne me permettent pas de passer par les référencs.

Si tu sais comment on peut obtenir les adresses d'objet comme "float[]" ou autre, laisse moi ton eemple dans le forum car je coince vraiment.

merci
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

Enfin quelqu'un qui à les même prob que moi avec C#...
Même si la prog avec C" n'est aps vraiment adapté aux jeux...
@+
Messages postés
33
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
22 octobre 2007

Pour les pointeurs, visiblement un truc comme


unsafe {
int a = 1;
int* p_a = &a;
}


semble fonctionner chez moi.

Pour opengl, nul besoin des pointeurs car en fait, j'ai decouvert hier des objets qui les remplacent.

Donc, en fouillant la faq de csgl, j'ai trouvé le remlacant des pointeurs :

c'est dans CsGL.Pointeurs
une classepar type de données c# :

PFloat pour float[],
PInt8 pour sbyte[],
PDouble pour double[],
...

vraisemblablement, il sagit de pointeurs fixes auquels est alloué un espace defini.

voci un exemple qui affiche tros points blancs :

static void affichepolygons()
{

float[] p1 = {
1.0f, 1.0f, 1.0f, -0.5f, 0.5f, 0.0f,		1.0f, 1.0f, 1.0f, 0.0f, -0.5f, 0.0f,
1.0f, 1.0f, 1.0f, 0.5f, 0.0f, 0.0f
                  };

sbyte[] p4 = {0, 1, 2};

PFloat p_p1 = new PFloat(9);
PInt8 p_p4 = new CsGL.Pointers.PInt8(3);
//copier le contenu des tableaux p1 et p4 dans les nouveaux tableaux
                PFloat.Copy(p_p1, 0, p1, 0, 9);
PInt8.Copy(p_p4, 0, p4, 0, 3);

//je passe par la ; il parait que c'est plus rapide
GL.glInterleavedArrays(GL.GL_C3F_V3F, 0, p_p1);
GL.glDrawElements(GL.GL_POINTS, 3, GL.GL_UNSIGNED_BYTE, p_p4);

}



Si ca interresse, je mettrai le source complet sur le site.
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

Je veux bien une petite source !!
@+
Messages postés
33
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
22 octobre 2007

la source est mise sous le titre "OPENGL SANS POINTEURS EN C#"

elle a ete un peu modifiée et affiche maintenant deux triangles autour desquels on effectue une rotation.
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

OK merci beaucoup !!!
@+