Cuadro de selección

Started by Yawin, December 03, 2010, 11:04:38 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Yawin

Mientras mi marcianitos pasa unos días de tests no puedo aguantarme estar sin codificar. Asi que he empezado un pequeño proyecto, èro me asalta una duda enorme. Este juego, tiene la enorme esperanza de acabar siendo un juego de estrategia en tiempo real. El primer problema que me ocurre, es: El cuadro de selección. La teoría es:

-Una imagen de un cuadrado, con un alpha que permita ver a través de el sin problemas.que su (x,y) esté en el punto medio entre las cohordenadas en las que se ha clicado y en las que está actualmente. Con un size proporcional a la distancia entre esos dos puntos.

Problema nº1: No se como calcular el punto medio entre las dos cohordenadas.
Problema nº2: Si intento acceder a Size.x y a Size.y, el programa entero casca (pero el compilador no me dice que no se pueda hacer.

Problema nº3: Tendría que meter las IDs de toooooooodas las cosas seleccionables. He pensado dividirlas, de momento en 4 grupos: Unidades tuyas, edificios tuyos, unidades no-tuyas y edificios no-tuyos. Ahí tengo una pequeña duda. ¿Se pueden redimensionar las arrays como en C? Es decir, recuerdo que en C podías coger una array, empezar a matarle cosas, y cuando se te acababa decirle: pos ahora, en vez de 4 slots tienes 10. Y que no se borrase todo lo anterior.

_________________________________________________________________________

Edit 1:
Me acabe de surgir otro problema. Si hago el main en un .prg y la unidad genérica en otro .prg ¿dónde tengo que declarar las globales para que los dos puedan acceder a ellas? ¿Hay que hacerlo de alguna forma especial?
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DjSonyk

#1
Buenas ,respuestas posibles... :P

1º No entiendo muy bien a que es lo que te refieres ,con el punto medio de las coordenadas pero tenemos creo que se llama PATH_FIND que busca las mejores rutas de un destino a otro,por ejemplo Mover tu unidad a el punto que haces click.
Si te refieres el medio de las dos algo chapuzero seria comprobar las coordenadas de los 2 restarlas ,dividirlas entre 2 y sumarlas al la coordenada mas cerca del 0....
2º size.x se escribe size_x y size.y se escribe size_y ,hay que mirar en la wiki.
3º Podrias allocar memoria para hacer lo que quieres,pero creo recordad que una vez lei en otro hilo que en windows es un lio , creo que no se podia agrandar sin perder datos o algo asi,si veo el link del hilo te lo pego.
4º Los datos grobales siempre se declaran despues de PROGRAM indistintamente en el prg que los introduzcas y siempre que introduzcas el include correspondiente,ademas te aconsejo que sea el primer include .

Yawin

#2
Gracias por las respuestas. A ver si puedo explicar mejor la pregunta 1:

A ver, si habéis jugado a algún juego de estrategia, sabréis que si haces click izquierdo y arrastras sale un rectángulo que cuando sueltas se seleccionan todas las unidades propias que estén dentro. Bien, el tema es que donde pinchas, está el vértice superior si vas para abajo, y el vértice superior si vas para arriba. Pero siemre es un vertice.

Aquí que ocurre? que si envio las coordenadas de inicio al proceso cuadro_selección, eso se convierte en su punto medio, no en un vertice suyo, asi que necesito recolocar el proceso todo el rato, para dar el efecto que yo quiero.

Para recolocar el centro, necesito calcular la x y la y que están entre el punto inicial y el punto actual del puntero. Y no se cómo hacerlo xD

Y... ¿cómo se usa el "path_find()"? Esque he mirado en la wiki, pero no hay artículo.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end


Yawin

Me lo he leido entero, pero no me he enterado de nada xD
Pero bueno, hasta que llegue a esa parte, todavía hay tiempo.

Demomento, ese asunto en particular, no tiene prisa.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DjSonyk

Aqui tienes un ejemplo de path_find del "maestro" de prg xP ,http://forum.bennugd.org/index.php?topic=392.0 ,aun asi en bennupack hay otro ejemplo muy chulo ,donde haces click y el proceso busca el camino desde donde esta el hacia el click por un laberinto no recuerdo el nombre el programa pero si que esta en el directorio de los ejemplos.

DjSonyk

Quote from: yawin on December 03, 2010, 02:25:42 PM

Aquí que ocurre? que si envio las coordenadas de inicio al proceso cuadro_selección, eso se convierte en su punto medio, no en un vertice suyo, asi que necesito recolocar el proceso todo el rato, para dar el efecto que yo quiero.

Para recolocar el centro, necesito calcular la x y la y que están entre el punto inicial y el punto actual del puntero. Y no se cómo hacerlo xD

:o ¿Mande? ,o sigo sin entenderlo o chico no se que pretendes hacer...
Lo de hacer un cuadro de selección lo entiendo bastante bien,es mas me estoy currando yo uno para mi editor,pero lo que quieres hacer no te entiendo.
Yo voy hacer algo asi, boton izquierdo pulsado guarda x,y cuando sueltes boton izquierdo recoge las coordenadas y luego aplico las mates y ya esta.

Yawin

Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DjSonyk

Quote from: yawin on December 03, 2010, 04:00:26 PM
A ver si esto lo explica mejor:
http://pensarescompartir.com/explicacion.png
^^ ....
La verdad no entiendo lo que quieres conseguir con eso,pero bueno una solución ya te conte como.

Suponiendo que el recuadro lo haces como en el ejemplo . Cuadro de izquierda a derecha y de arriba a abajo.
Entre dos porque queremos la mitad/centro entre las dos distancias.
X final - X inicial / 2 + X inicial =  100 ( x final ) - 10 (x inicial ) = 90/2 =45 + 10 (x inicial )=55 centro de las dos X
Y final - Y inicial / 2 - Y inicial =   350 ( y final ) - 150 (y inicial ) = 200/2 =100 + 150 (x inicial )=250 centro de las dos Y

luego el centro del cuadro_selección estaria en 55,250.Sino me equivoco....

Yawin

Vale, lo he hecho asi, y la verdad es que me funciona bien.
process cuadro_sel(int x_in, int y_in)
begin
file=fpgs[0];
z=-1;
graph=2;
repeat
x=puntomedio(x_in,ppunt.x)-6;
y=puntomedio(y_in,ppunt.y)-6;
size_x=ppunt.x-x_in;
size_y=ppunt.y-y_in;
frame;
until(!mouse.left);
end
function puntomedio(int a, int b)
private
int resul;
end
begin
resul=(a+b)/2;
return resul;
end

Excepto por un detalle. Sólo veo el rectángulo si las 2 sizes son positivas. ¿Hay alguna función para pasar un número a su absoluto?
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DjSonyk


Yawin

Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DjSonyk


Drumpi

El tema de los arrays te lo respondo yo:

Los arrays son de un tamaño definido, no se puede cambiar.
Pero en cambio puedes usar punteros como si fueran arrays, y para ello ya lo expliqué en este hilo:
http://forum.bennugd.org/index.php?topic=988.0

Y en cuanto a lo de tener varios ficheros con código, puedes poner las globales donde quieras, pero siempre después del program. Usar "import" para indicarle al programa que debe leer de otro fichero es como hacer literalmente un "copia y pega" del contenido en ese punto exacto del programa, por lo que podemos tener un fichero aparte para la declaración de las GLOBALS, para diversas funciones auxiliares, o incluso para un trozo de código que se repite en varios puntos y no queremos volver a escribirlo (sí, no hace falta que esté en una función aparte, ni en un proceso ni nada, sólo el código).
Mi recomendación: crea dos ficheros por cada código que vayas a separar, en uno (yo le pongo la extensión .h) la declaración de las variables globales, locales o de los propios procesos que se vayan a usar en el otro (que suelo poner la extensión .inc) que sólo contiene las diversas funciones. De esta manera, en el prg principal, primero "incluyes" todos los .h y después los .inc, te evitará más de un problema con el orden de declaración, porque los "includes" sí necesitan que las variables/funciones/procesos que se usen en ellos estén escritos ANTES de usarlos.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

lo que quieres es una rectangulo como se hace con el paint ¿no?