Cuestión Sobre Clases


Ir a la página 1, 2  Siguiente

Objetivo: Cuestión Sobre Clases
Buenas!.

En uno de los ejemplo que hice y cambié actualmente. Tenía una clase circulo que "solamente" se dedicaba a dibujarlo,
coordenadas, radio, etc, etc.

Luego en el FMain, tenía dos procedimientos que trabajaban con la clase circulo, en uno, controlaba la colisión entre
dos objetos de la clase circulo y la colisión con los bordes del área de dibujo.

Estos dos funciones, las incorporé hoy a la clase circulo como métodos.
Estos métodos no pertenecen al diseño de un circulo, tratan el tema de colisiones.

¿ Debí crear otra clase para las colisiones ?.
¿ Los métodos son adecuados para la clase circulo ?. Estoy centrándome en un problema que hace este ejemplo en concreto, no generalizo.
En este caso, el mismo método de las colisiones, lo puedo incorporar al método que dibuja el mismo circulo o tenerlo como un método más.

Ejemplo:

Puedo tener en el mismo método que se dibuja el circulo:

- Dibujar el circulo
- Actualizar su posición.
- Comprobar colisión con bordes

O tener el método de comprobar la colisión con bordes fuera del método dibujar.
Puedo llamarlo desde FMain o desde la propia clase en el método de dibujo.

¿ Qué creéis que es más adecuado ?.

Cómo es lógico actualizar la posición del circulo, trata el movimiento, no un dibujo, aunque cambie sus coordenadas.

Un circulo de por si, no comprueba una colisión, ni tampoco se actualiza su posición.

Saludos

Objetivo: Re: Cuestión Sobre Clases
Shell:

Yo creo que como es una cosa que le pasa al circulo, deberia de ser un método de este.
Este método tendria un argumento con un array de objetos que tiene que comprobar si colisiona. (Por ejemplo ese array, contiene los circulos o paredes que esten cercanos a él).

Se puede añadir otro método al circulo, que devuelva que objetos del dibujo estan cerca a él (a un mínima distancia), y este resultado es el que use el método de colisiones del círculo



Saludos

Julio

Objetivo: Re: Cuestión Sobre Clases
Julio:

Por un lado , pensaba. Dibujar un circulo. Es que eso ya lo hace Paint.Arc, tengo la clase que lo hace!.
Pero claro, al crear la clase es algo más que solo eso. Son métodos que añadimos al que existe.
También facilitan la creación del circulo, no es tan "abstracto" en su creación.

Actualmente estoy con otros ejemplos de dibujos.

distancias

Son dos rectángulos que se mueven dentro de un área. Y tambien tengo otra clase, la clase línea.
La linea se mueve a la vez que los rectángulos, trazandose desde un centro a otro.

Las clases son totalmente independientes. En ninguna se crea un objeto de un tipo distinto al que pertenece.
A la clase linea solo necesito darle la coordenada de los centros de cada rectángulo y su dimensión, pero no le paso un rectángulo,

unalinea = New ClsLinea(gRectangulos[0].pos_rect, gRectangulos[0].dim_rect, gRectangulos[1].pos_rect, gRectangulos[1].dim_rect)


Es un ejemplo que estoy usando para colisiones. Con este ejemplo tan sencillo, se pueden hacer muchas cosas.

Saludos

Objetivo: Re: Cuestión Sobre Clases
Pues yo opino lo contrario que Julio.
Sin entrar en tu código ni en tu ejemplo, la clase padre de tus círculos (o una de ellas) debe ser la clase "objetomovil" y heredar de ella todos los metodos de movimiento, colisión, etc. y las propiedades de perímetro, posición, dirección, velocidad, etc. Deja al círculo que sesa eso, un círculo y nada más.

Saludos.

Perfil MP  
Objetivo: Re: Cuestión Sobre Clases
Shordi:

Discrepo. Yo creo que cada objeto "circulo", "rectangulo", etc, debe saber como se colisiona él con otros objetos.

Por ejemplo. si al método de "colisión" del circulo, le pasas un circulo, debe de comprobar que su las distancias de sus centros es menor a la suma de sus radios.

Otra cosa es que haya una clase "padre" del que hereden los circulos, rectangulos, etc. que tenga un metodo de "colisión", y este método se redefina en cada hijo.

De la forma que yo lo describo, es muy fácil, añadir objetos (rombos, triangulo, etc), y en que cada uno de ellos se defina la "colision" entre los distintos objetos ya existentes, sin tener que tocar el código del resto del programa.


Por ejemplo:

En la clase circulo, tendria un metodo de colisión solo entre circulos (si le pasas otro tipo de objeto, devolveria que no lo sabe)
En la clase rectangulo, tendría un metodo de colisión donde calcula la colisión entre rectangulo-rectangulo y circulo-rectangulo
En la clase rombo, tendria un método de colisión donde calcula la colisión entre rombo-rombo, rombo-rectangulo y rombo-circulo
En la clase triangulo, tendria un método de colisión donde calcula la colisión entre triangulo-triangulo, triangulo-rombo, triangulo-cuadrado,triangulo-circulo
....


A ver si jguardón, nos cuenta su punto de vista.

Saludos

Objetivo: Re: Cuestión Sobre Clases
Julio:

Citar:

Por ejemplo. si al método de "colisión" del circulo, le pasas un circulo, debe de comprobar que su las distancias de sus centros es menor a la suma de sus radios.


Si, eso es lo que yo habría hecho, pero eso es engordar el código de la clase circulo. Se puede hacer y lo hacemos, pero no es adecuado.
Lo hacemos al principio, por que vamos sobre la marcha.
La clase circulo debe heredar métodos de una clase llamada "Sprite" donde están almacenados métodos para infinidad de cosas.

Esa clase Spirte, puede ser como lo que le pasa a la clase Linea. Ella no sabe que le estás pasando un rectángulo, solo entiende dos coordenadas,
un comienzo y un final donde se va a trazar la línea.

Entonces esa clase Sprite tiene los métodos de colisión, pero no sabe si le pasas un objeto determinado. Que supongo que si, que serán imágenes
normalmente. Desde luego la propia clase padre Sprite heredara, la clase rectángulo..y así.

Con el tiempo y un poco de mal uso (por precaución) , vemos como las clases las repetimos una y otra vez, añadiendo su código
a nuestros programas. Y le añadimos métodos que son para "desahogo" de una aplicación concreta, pero es algo que no nos va
a valer para todos nuestros programas. Con lo que vamos a tener tropecientas clases de la misma clase modificada y añadida
a nuestros ejemplos.

Es mejor dar a cada cosa lo suyo.
Pero eso no es realmente fácil y optamos por añadir métodos que no corresponde a una clase.
Es un fallo muy general y no es que este mal, aprendemos con el tiempo a mejorarlo.

Ojala tuviera más tiempo para lo que me gusta....

Saludos

última edición por Shell el Jueves, 24 Marzo 2016, 14:09; editado 2 veces
Objetivo: Re: Cuestión Sobre Clases
Por cierto este ejemplo no lo he subido aun. Trata el tema de los Sprites..

Para muestra un botón.

cacas_sprites

Es que yo quería daros una sorpresa, pero no acabé el código y así lleva desde Diciembre.

Para cada objeto se crean dos instancias distintas, una trata la imagen ( cosa que en gambas no lo veo necesario, ya que tiene sus métodos)
y otra de la clase Sprite con sus métodos. El objeto Sprite tiene datos como son la coordenada de inicio, su velocidad, su ángulo y su velocidad angular.

Logré que el objeto rebotase por los lados, pero no logré que se chocasen y rebotasen. Cosa muy común en este tema.
Por otro lado, el método de rebotar por las paredes, no lo añadí a la clase Sprite y es sencillo de hacer.

Algún día acabare el ejemplo y tranquilos, no mancha, ni huele.

Saludos

Objetivo: Re: Cuestión Sobre Clases
Por cierto más que un circulo es una pelota. De ahí a que no sea un circulo completamente.
Por eso tiene otros métodos distinto a un circulo. Vaaale, es una pelota "plana".

Objetivo: Re: Cuestión Sobre Clases
Shell:

He hecho una busqueda en google y me he encontrado esto:
http://devsdungeons.com/programacio...ripts-en-unity/

Unity es un lenguaje especifico para hacer juegos. Por lo visto tiene una clase " Collider" que
define una región para un GameObject en la cuál se producirán colisiones.

Este tiene estos métodos especializados en colisiones::
OnCollisionEnter/OnCollisionStay/OnCollisionExit (métodos/mensajes) – estas funciones se invocarán automáticamente (mensajes) cuando un objeto empiece (enter)/permanezca (stay)/termine (exit) una colisión con un Collider, respectivamente.

Habrá que hacer algo similar con gambas... no olvideis de la clase rect ( http://gambaswiki.org/wiki/comp/gb.gui/rect?l=es ), que puede ser muy util.

Objetivo: Re: Cuestión Sobre Clases
Julio:

Citar:

Unity es un lenguaje especifico para hacer juegos. Por lo visto tiene una clase " Collider" que
define una región para un GameObject en la cuál se producirán colisiones.


No sé si una zona es adecuada para decir que se van a producir colisiones. Son los objetos los que colisionan.

Saludos

Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4099s (PHP: -85% SQL: 185%)
Consultas SQL: 45 - Debug off - GZIP Activado