Buenas, me presento, soy Byel (que es el diminutivo de Gabriel en catal?n) y estoy muy contento de haber encontrado por fin un foro dedicado a GameMaker.

Resulta que estoy haciendo un juego de gesti?n, empiezas en un planeta que debes colonizar, as? que los primeros edificios son b?sicamente minas y centros de producci?n de material para as? crecer y poder desarrollar o comprar tecnolog?as que te permitir?n convertir a la colonia planetaria en un vergel radiante de vida (y con atm?sfera). Entonces el jugador podr? dedicarse a sus habitantes y entrar?n en juego edificio m?s t?picos de estos juegos como: hospitales, comisarias, supermercados, ocio... ya sab?is royo SimCity (pero m?s light)

Bien, la duda, problema o como sea que pueda llamarse es la siguiente:
?Que sistema puedo utilizar para simular el consumo de energ?a proporcionado por una central?

Deduzco que el comando distance_to_object es clave, pero no se exactamente como puedo seguir.

?Gracias de antemano!

Mmmm
No Te Endtiendo, explicate bein y de podre ayudar.
-Crear juegos no es un m?todo de quemar tiempo, es una forma de arte.
-Se busca buen programador de IA's.

Si eres nuevo con el Game Maker, te recomiendo que mires este tema:
http://www.comunidadgm.org/index.php?topic=13388.0

#2 Diciembre 18, 2010, 10:15:57 AM Ultima modificación: Diciembre 18, 2010, 10:20:24 AM por byel
A ver, para que los edificios funcionen deben recibir un suministro de energ?a y este suministro lo proporciona una central.

El problema es que no se como relacionar a la central y a los edificios de manera que en el juego se necesiten, es decir, que los edificios solo funcionen cuando tengan una central cerca y esta les proporcione energ?a (por ejemplo  si est? apagada no funcionar?n aunque dicha central est? lo suficientemente cerca del edificio)

Pues crear?s un objeto, obj_central, que tenga una variable... encendida=1. Y la variable energia=100, por ej.
Entonces, en el evento step de cada edificio que la necesite, pones:
if instance_exists(obj_central) and obj_central.encendida=1 and obj_central.energia>0 {obj_central.energia-=0.1; //Aqui los codigos que pasan al funcionar
}

As?, s?lo si existe un obj central, si est? encendida y si tiene energia, cada edificio consume constantemente. Claro, puedes hacer energia infinita, eso depende de ti. Pero, si hay varios objetos energia, la cosa se complicar?a y habria que hacer alguna cosa mas, pero de momento puedes probar algo as? con una central. Tambien puedes a?adir que solo reciba si la central est? cerca, claro.
Bona sort!

El problema es que si van a haber varias centrales de energ?a, tantas como un hipot?tico jugador quisiese colocar.

Cuando coloco dos centrales, la cercan?a no, pero la variable "energ?a" que toma es siempre la de la primera central colocada aunque la que proporcione energ?a al edificio est? pagada.

TT que complicau es esto

?Y usando la id del objeto central?

Suponiendo qe la central tenga que estar cerca, pues haces que el objeto central sea un c?rculo enorme. Entonces, dibujas el sprite de la central en el centro, pero el objeto real ser? un c?rculo grande, conque, para que una instalaci?n funcione, debe estar colisionando con ella (if place_meeting(x,y,obj_central). Aunque, si hubiera dos centrales colisionando, deber?as hacer a cada edificio una variable, funcionando=0, y que al colisionar con una central, cambie a 1 hasta que ?sta se apague. As?, s?lo funcionar? con esa central, y aunque colisione con otra no contar? porque tendr? funcionando=1

#6 Diciembre 18, 2010, 07:10:10 PM Ultima modificación: Diciembre 18, 2010, 07:13:54 PM por Raul_Omega
No te voy a escribir los c?digos porque me llevar?a rato (y se aprende m?s si lo haces tu :P), pero te cuento lo que yo intentar?a hacer.

Se supone que para cada central y edificio crearas un objeto

PASOS

1) Crear un array "centrales" en la que guardar?s la id de cada central del planeta. Para eso, cada vez que el jugador a?ada una central al planeta, en la primera posicion libre del array se almacenara el id (usando la funcion id)

Este array debera estar creado en algun objeto de control del planeta o algo asi, digamos "control_planeta"

2) Desde el objeto que solicita energia, para cada central calculas la distancia a dicha central. Puedes crear otro array "distancias" y lo recorres de modo que [gml]distancias=distance_to_object(control_planeta.centrales)[/gml]

3) Luego con alg?n m?todo de ordenamiento, creas otro array de id de cada central ordenado por distancias, llamemosles "centrales_ordenadas"

4) Luego recorres el array desde la primera posici?n y vas comprobando si tiene energ?a y si la distancia no es mayor al limite que quieras.
[gml]centrales_ordenadas.energia>0 and distance_to_object(centrales_ordenadas)<limite[/gml]

La primera para la que se cumplan estas condiciones, esa sera la central que abastecer? a tu edificio! te guardas el indice del array "centrales_ordenadas" para el que se haya cumplido y ya puedes operar con el para quitar energ?a a la central

[gml]centrales_ordenadas[indice].energia-=1[/gml]

Bueno aqu? solo te he expuesto una metodolog?a, ahora te tocar?a a ti implementarlo... quiz? haya formas mas f?ciles y/o eficientes de hacerlo pero yo creo que esto deber?a funcionar. Si decides seguir este m?todo y algo no te ha quedado claro, pregunta!

Oks os cuento...

El de colisi?n me mola por su simplicidad, pero no puede desconectarse una central porque quiz?s est? abasteciendo a otros edificios fuera del alcance de la que provoca el "conflicto" ?sapsss?. De todas formas me lo guardo porque no conoc?a esa funci?n y seguro que me vendr? muy bien en alg?n momento ?gracias!

El tema de los arrays no lo domino, alg?n tutorial o una explicaci?n r?pida de como se hacen y como se a?aden posteriormente valores?

Me interesa el tema porque va a ser que me van a hacer las cosas mucho m?s f?ciles  ;)

Os dejo una muestra de lo que tengo hecho hasta ahora. Como ver?is est? muy verde a?n y podr?an cambiar muchas cosas todav?a.
http://www.megaupload.com/?d=YLZCBDFJ




Rapituto sobre arrays

Crear:
[gml]mi_array[0]=3;[/gml]

A?adir/modificar valores:
[gml]mi_array[1]=5;
mi_array[5]=7;
mi_array[3]=1;
mi_array[0]=4;
//...[/gml]

Fin.
       

Comprendido. A ver si encuentro un hueco entre las cosas de clase y las fiestas y aplico todo esto a mi juego.

?SALUDOS A TODOS Y FELICES FIESTAS!
[/color][/size][/size]

Yo tengo una solucion mas simple, pero igualmente necesito saber una cosa. Si hay una central suministrando a muchas casas y hay otra en el mismo lugar, supuestamente todas las casas agarran energia de la primera construida, pero si se le termina agarran de la otra?
Bueno, te dejo el ejemplo q hice a ver si sirve, con click izq creas centrales y con el der creas casitas




#11 Diciembre 20, 2010, 01:12:07 PM Ultima modificación: Enero 03, 2011, 09:04:38 PM por byel
efectivamente compa?ero, un edificio consume energ?a de donde pueda mientras est? a su alcance.

Ayer no podia dormir e hice algunos adelantos, as? que, si consigo implementar un poco m?s el juego con todo este material y sugerencias que hab?is aportado lo subir?. Buscadme en "juegos en desarrollo"  ;)

Edito: Bueno, decir que la propuesta de Texic funciona de categor?a ?te apunto para los cr?ditos! y gracias a todos los dem?s.