Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Un problemilla con C#

Iniciado por Diegolito, 03 de Noviembre de 2009, 08:03:59 AM

« anterior - próximo »

Diegolito

Hola a todos, estoy usando XNA, pero tengo un problema que me trae de cabeza: mi falta de experiencia. Estoy intentando desarrollar un asteroids, y para ello uso por ahora dos clases: la nave y el asteroide.

Mi problema es el siguiente: ¿Como hago para usar variables de una clase en otra? me explico: es sobre todo para el sistema de colisiones, quiero comprobar que el bounding box de la nave choca con la bounding sphere de los asteroides, pero no me deja hacerlo en ninguna de las dos clases porque solo conocen donde esta situado su bounding box y sphere.

Lo mismo me pasa con cualquier tipo de variable, porque queria hacer una clase para  los disparos, y como cuando pulso la tecla de disparar tienen que aparecer en las cordenadas (x, y) de la nave, no puedo hacerlo porque no se como insertar el valor de la variable de la clase nave en otra variable de la clase disparo.

Salu2.

kraj0t

Un momento: por lo que preguntas deduzco que no estás muy puesto en programación orientada a objetos, ¿no?

Deberías leerte algún buen libro de programación en C#. De verdad, no es un capricho, es por evitarte dolores de cabeza y frustraciones. No todo es diversión en estas tierras del señor  0:-)

Respondiendo a tu pregunta: ¿estás declarando las variables de las clases Nave y Asteroide como public? Para que un miembro de una clase sea visible desde fuera tiene que estar declarado como público.
Muerte y destrucción a tú
¿A yo?
¡A tú!

Vicente

Declara los campos privados y usa propiedades públicar para poder acceder a ellos. Es de las cosas más básicas tanto de C# como de la POO (quizás deberías leer tutoriales más básicos...).

Un saludo!

Vicente

Diegolito

De hecho, para los disparos, usaba la variable posicion (variable Vector 2), y esta variable era publica, si no me equivoco vosotros os referis a lo siguiente (que es lo que yo he hecho, y esta escrito evidentemente en la clase nave)
// Definicion de variables
public Vector2 posicionNave;

Y escribiendo en la clase disparo, no se como usar esa variable, porque usando posicionNave, me dice que no existe en el contexto actual.

Sobre vuestro consejo... Tengo un libro, y cada vez que tengo algun problema lo consulto, pero no estoy siguiendolo paso a paso (es un buen tocho y me da miedo amargarme y dejarlo). Despues de consultarlo es cuando vi que tenia que hacer la variable publica, pero seguia sin funcionar...

Si alguien me recomienda algun tutorial concreto de C# lo agradezco, es cierto que no tengo mucho conocimiento en programacion orientada a objetos... Espero poder cambiarlo en unos meses.

Salu2.

kbks

Aprende POO y tus dudas desaparecerán antes de que te des cuenta, porque lo que te pasa no es un problema que se arregla de tal o cual manera, si no que tienes un error de concepto.

Diegolito

Ok...¿Y algun tutorial, manual, libro... recomendado?

Salu2.

Vicente

Necesitas aprender un poco de POO, para C# tienes:

http://www.charlespetzold.com/dotnet/ (para la gente que sabe C o C++)
http://www.csharpcourse.com/ (para la gente que sabe muy poco de programación y no sabe POO)

Respecto a tu código, debería ser algo como:

private Vector2 posicionNave;
public Vector2 PosicionNave { get { return this.posicionName; } set { this.posicionNave = value; } }

Algo así. Un saludo!

Vicente

Diegolito

Vaya, muchas gracias por los links, me seran muy utiles :D.

Salu2.

fiknius

Yo lo primero que haria seria ver esto:

http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos

Cuando tengas claro todo los conceptos de la POO busca algun manual de POO que no este orientado a ningun lenguaje de programacion, ya que el concepto es igual para todos los lenguajes.

Una vez tengas esto claro hacerlo en C++, C#, Java o lo que sea sera facil.
Animo que aunque parezca cosa de locos, no te imaginas lo util que es.
Saludos.

IDandT

#9
Coincido en el tema de que te documentes sobre POO.

En cualquier caso, yo lo que hacía es lo siguiente (esta escrito a piñon osea que la sintaxis por el forro jejeje)

En la clase Nave por ejemplo hacía un metodo publico llamado

bool CheckCollisionWithAsteroid(Asteroid a)
{
if this.BoundingBox.Intersects(a.BoundingBox) return true;
return false;
}

Evidentemente los BoundingBox tienen que ser propiedades publicas (ojo, propiedades, declara las variables como bien te han dicho arriba como private y utiliza una propiedad para cada una de ellas, get set en c#).

Luego mediante un foreach pues pateaba las colisiones

foreach (Asteroid a in AsteroidList)
{
  if  Nave.CheckCollisionWithAsteroid(a) loquesea
}


De todas formas, estoy de acuerdo, que lo ideal es que pilles un manual de c# y aprendas lo basico de POO y el lenguaje

Salu2

Diegolito

Muchas gracias a los dos por las respuestas, ultimamente estoy lliado con examenes, y el poco rato que le puedo dedicar se lo echo a documentarme sobre POO en vez de al juego pero cuando acabe la evaluacion intentare aplicar esto que me habeis dicho (los codigos quiero decir).

Salu2.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.