|
Página 1 de 1
|
Rendimiento De La Orden Draw...
Autor |
Mensaje |
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Rendimiento De La Orden Draw...
Queria preguntaros, como es mas rapido usar la orden Draw...
Os explico tengo que dibujar en la pantalla muchos clases que incluyen una pictures diferente...
Normalmente haria en cada clase, un método para dibujarla. Por ejemplo:
Como veis uso muchos draw.begin y draw.end.... ¿es más rapido crear una subrutina y en ella dibujarlo todo solo con un draw.begin y un draw.end?
Me explico:
'modulo dibujar toda la pantalla
En principio, parece que la primera forma es mas clara, mas orientada al objeto, pero mas lenta que la segunda ¿no? ¿que os parece?
Saludos
Nota:
¿Hay alguna forma de medir el rendimiento, tiempo que se tarda en hacer una operación, consumo de memoria del ordenador en gambas?
|
#1 Martes, 05 Junio 2012, 20:09 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Rendimiento De La Orden Draw...
Hola Julio.
Es lo normal, construirte un procedimiento para que no repetir partes de código.
Bueno, un método.
La primera forma es mas primitiva si tienes que repetir muchas veces la misma rutina.
Y si fuera un for each next.Estas tratando con un array.
Es dibujar todos los planetas y las naves.¿ No ?..Si no, no mostrara todos ellos.
Para medir el tiempo.Una manera fácil seria guardar la hora al comienzo de la rutina que te interesa en una
variable y al acabar en otra.Haces la diferencia.
Saludos.
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#2 Martes, 05 Junio 2012, 23:20 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Rendimiento De La Orden Draw...
Julio, tenés que pensar en términos de objetos. Si encontraste un método que se repite es que obviaste la existencia de un concepto más abstracto que lo incluye. Por ello, no es que la 1era opción sea más orientada a objetos, de hecho la redundancia de ese método implica que algo está mal. No obstante, no hay razones para pensar que una sería más rápida que la otra.
Si no recuerdo mal, los objetos DrawingArea brindan la posibilidad de usar una caché y es en el uso de esa característica que podría haber una diferencia apreciable en el rendimiento.
Saludos.
=================== Cómo programar con Gambas
Speed Books: informática libre.
|
#3 Miercoles, 06 Junio 2012, 01:08 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Rendimiento De La Orden Draw...
Shell:
Citar: for each next
Buena idea, mirare en la documentacion como hacerlo con un array (yo siempre lo habia usado con consultas de bases de datos )
fabianfv
Citar: No obstante, no hay razones para pensar que una sería más rápida que la otra.
Lo que he "descubierto", es que cada vez que se ejecuta un bloque de orden "draw.begin ..... draw.end", dibuja lo que le hayamos dicho... si lo pongo varias veces (una para dibujar el fondo, otro para dibujar cada planeta, otra para dibujar cada nave), provoca un efecto de "refresco" de pantalla
Sin embargo, usando un solo bloque para dibujarlo todo, ese efecto no se nota, quedando mejor la presentacion de los movimientos.
Citar: los objetos DrawingArea brindan la posibilidad de usar una caché
La propiedad cache del drawingArea, la tengo como true, ya que sino tengo problemas al poner formularios encimas, o mover el objeto...
Gracias !!!
última edición por jsbsan el Jueves, 07 Junio 2012, 20:17; editado 1 vez
|
#4 Jueves, 07 Junio 2012, 20:15 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Rendimiento De La Orden Draw...
fabianfv
Lo que he "descubierto", es que cada vez que se ejecuta un bloque de orden "draw.begin ..... draw.end", dibuja lo que le hayamos dicho... si lo pongo varias veces (una para dibujar el fondo, otro para dibujar cada planeta, otra para dibujar cada nave), provoca un efecto de "refresco" de pantalla
Sin embargo, usando un solo bloque para dibujarlo todo, ese efecto no se nota, quedando mejor la presentacion de los movimientos.
Pero, ¿estarías redibujando todos los elementos que se ven en el formulario? Si mal no recuerdo, se puede dibujar en un área específica de un DrawingArea, lo que te permitiría redibujar sólo las partes que cambian (que se mueven).
Respecto de que opción "es más POO", es la segunda (aunque ese método debe pertenecer a la clase adecuada).
Por otra parte no entiendo por qué tienes parametrizado el DrawingArea (¿drawing es un control personalizado basado en DrawingArea?). También es confuso el nombre de los arrays classplaneta[] y classnaves[] porque la lógica de tu código indica que son arrays cuyos elementos son objetos de tipo Planeta y de tipo Nave; sería más claro así: "planetas AS Planeta[], naves AS Nave[] (es innecesario y hasta confuso nombrar las clases usando el prefijo "class").
Me gustaría que me cuentes sobre este trabajo tuyo porque yo estuve escribiendo algunos juegos en gambas (aunque no están terminados) para mi libro y como un efecto secundario (pero buscado) lo que está emergiendo es un pequeño framework para juegos.
Por último, una pregunta. ¿Recuerdas si gambas brinda la posibilidad de ajustar el tamaño de una imagen (stretch) para dibujarla en un DrawingArea en un tamaño diferente al original?
=================== Cómo programar con Gambas
Speed Books: informática libre.
última edición por fabianfv el Viernes, 08 Junio 2012, 03:07; editado 1 vez
|
#5 Viernes, 08 Junio 2012, 02:57 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Rendimiento De La Orden Draw...
fabianfv
Citar: ¿estarías redibujando todos los elementos que se ven en el formulario?
Si, todos, primero el fondo, luego los planetas, luego las naves, luego las explosiones...
Citar: se puede dibujar en un área específica de un DrawingArea, lo que te permitiría redibujar sólo las partes que cambian (que se mueven).
Pues eso no se como se puede hacer....
Citar:
DrawingArea (¿drawing es un control personalizado basado en DrawingArea?).
Me equivoque escribiendo el codigo se trata de un DrawingArea... y no de un "drawing"
Citar: es innecesario y hasta confuso nombrar las clases usando el prefijo "class"
Pues, la verdad es que me resulta más cómodo para escribir el código, ya que aprovecho el Ide de gambas para cada vez que quiero instanciar una clase me resulta mas facil empezar a llamarla con "class..lo que sea" para encontrarla en la ayuda que sale...
Citar: Me gustaría que me cuentes sobre este trabajo
El juego que quiero hacer es parecido a este Enlace Juego Flash.
Lo que realmente me interesa el programar "la inteligencia del juego".... en eso estoy...
Citar: ¿Recuerdas si gambas brinda la posibilidad de ajustar el tamaño de una imagen (stretch) para dibujarla en un DrawingArea en un tamaño diferente al original?
Lo que dice la ayuda interactiva del ide de gambas es:
No se si te servirá...
última edición por jsbsan el Viernes, 08 Junio 2012, 16:30; editado 1 vez
|
#6 Viernes, 08 Junio 2012, 16:29 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|