Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Temas - DarkKRuleR

101
Solucionado, el problema era que usaba window_mouse_set y en pantalla completa daba problemas, arreglado usando window_view_mouse_set (aunque es 3D y no usaba la view, ésta no tiene problemas con pantalla completa)
102
Preguntas y respuestas / Problemas con los ángulos
Junio 25, 2013, 04:13:14 PM
Buenas a todos! Pues tantos años de comenzar proyectos (para mí) increíbles, y de dejar la mayoría por costar hacer las animaciones gráficas (todos abandonados) me decidí a intentar un "minijuego". No lo es, pues será MUY complejo, pero será estilo gráficos muy simples (la historia lo justifica).

Pongamos al personaje y objetos pequeños por el escenario. Quiero "afectar" sólo a los objetos situados en un cono delante del personaje a donde él mira según el ratón. Tengo esto:

if (point_direction(objM.x, objM.y, x, y) <= ang(45+point_direction(objM.x, objM.y, mouse_x, mouse_y))
        or point_direction(objM.x, objM.y, x, y) >= ang(315+point_direction(objM.x, objM.y, mouse_x, mouse_y)))


ang es una función que ajusta ángulos (si se pone <0 o >359 suma o resta 360 para ajustar). Pero no funciona!

En el caso más simple, mirando a la derecha con el ratón, la suma del lado derecho de la ecuación que tiene el point direction da 0, pues el personaje está a la izquierda y el objeto a la derecha, y dará cero. Así, en el primer caso, si el ángulo entre el personaje y el objeto (x, y son las coordenadas del objeto, objM.x del personaje) es menor o igual que 45 o mayor o igual que 315, ok.

ESO DEBERÍA afectar a todos los objetos situados en un cono de 90 grados si miro a la derecha. Y, sumando el point direction según el ángulo entre objM (personaje) y el ratón, debería funcionar para tdos los lados...

qué hago mal? Espero que se entienda. El personaje mira hacia donde está el ratón, y quiero que "Lance rayos" que tienen una cobertura de 90º, "afectando" a todo objeto dentro del cono, comparando los ángulos, pero no me funciona.

PD: preferiría no usar un objeto con un sprite con forma de cono, pues la distancia del cono variará, y también su anchura en grados variará, prefiero hacerlo matemáticamente comparando ángulos.
103
Buenash! Pues tengo esta gran duda, pues no es normal que el juego se me ralentice sin casi tener nada...

no uso tiles, sino objetos. Es necesario pues las tiles deben ser dinámicas: a parte de modificar su xscale, modifican su x según una variable local que ellas tienen (con un valor distinto en cada tile) y demás cosas. Pero claro, me va lento. Cada objeto sólo tiene, en el draw, dos draw_sprite_ext (1 para la tile en sí y otra para dibujar sombra encima) pero parece que eso lo ralentiza.

Podría hacer varias cosas. Que el objeto no use el evento draw, y en su lugar cree un segundo objeto para la sombra. Duplicar el número de objetos para no usar evento draw, pero no parece viable.

Mirando, he visto que puedes modificar las coordenadas y el image_xscale de las tiles. Sería genial si pudiera decirlo para todas, pero sólo funciona dando el id...

así que, habría alguna manera... de decir, teniendo un objeto controlador para todas las tiles, cuando ese objeto reaccione (cuando cierta variable tome cierto valor) que diga:


with(tile1) {
//código que sume la coordenada x o cambie el image_xscale según los resultados de unos if's else's
} with(tile2) {
//código que sume la coordenada x o cambie el image_xscale según los resultados de unos if's else's
}


Pero claro, PODRÍA FUNCIONAR pero necesito la ID.
Quizás, al crear la room, meter en un array las id's de todas las tiles del mismo tipo o algo así...

a ver, quizás sería más eficiente, pues podría usar tiles y sólo 1 objeto controlador (al parecer el evento draw lo hace superlento aunque sólo tenga 2 draw_sprite), pero no sé cómo hacerlo pues sólo funciona con las id's, y debería poder decirle "haz esto para todas las tiles llamadas tal"
104
Buenash! Tanto tiempo sin trabajar con Game Maker, y ahora estoy metidísimo en un proyecto con un amigo (yo programo y dibujo, él me ayuda en la historia y diálogos).

Quizás alguien me recuerde hace varios... años?, donde subí una demo de Shadow's Destiny: Ragnarok (una sombra con una armadura guay que se transformaba en armas, una villa arrasada, unos templos... la imagen del medio en mi firma desactualizada, el tema de la demo ya fue borrado), pues en nada tendréis demo de una versión alternativa de ello, la "segunda" parte del juego nunca acabado (básicamente el mismo juego, con nuevos protas, nueva historia, nuevo gameplay...y la historia situada justo después de la hipotética historia de ese juego)

La cosa es, en cierto momento utilizo instance_place para checar si hay suelo bajo mis pies, y en función de ello parar la gravedad o seguir cayendo. La cosa es, que en una situación (aunque parezca raro pasa, es debido a mi sistema de juego) tengo 5 suelos justo encima de otro.

La cuestión es: cuando hay 5 objetos iguales uno encima de otro, un instance_place cómo trabaja con ellos? Si no me equivoco mirará uno y devolverá su id. En ese caso cuál de los 5 mira primero, el de menor ir, el de mayor id, al azar? (Esta es una duda "auxiliar", a lo mejor resolviendo esta PEQUEÑA duda puedo resolver el problema mayor, es un acercamiento)
105
Buenas! Pues en mi programa, tengo una variable string donde voy guardando todo lo que pasa. Es un juego de cartas y cada vez que el usuario hace algo se añade una nueva línea a la variable (log += "#Nueva línea!"). Cosas del tipo "Jugador A roba una carta", "Jugador A suma 10 Vidas a Jugador A", etc. Fácilmente puedo ir añadiendo nuevas líneas al string sumando un string nuevo a la variable string, y ello lo añade automáticamente, y haciendo un draw_text con una y que pueda modificar con las flechas me muevo por el texto.

El  problema es que esta variable podría hacerse muy larga y contener MUCHO texto. Así que... un string tendría número máximo de carácteres? si lo tiene, qué sería recomendable hacerme? un array de... 100 posiciones de strings, y cuando uno se vaya a llenar paso al siguiente? si no tiene tamaño máximo igualmente debería hacer lo anterior, u otra cosa, para que sea más eficiente y no se bloquee, o da igual?
106
Buenash! Pues estoy con un programita para llevar batallas de cartas, sin online, donde cada usuario hace su turno en el juego, acaba, genera un savegame que le pasa al rival para que continue, etc etc, pasándose savegames. Pero ahora que hago pruebas me da error...

al comenzar debes introducir el modo: modo usuario o modo maestro, el cual solo uso yo y requiere contraseña. Yo uso el modo maestro e introduzco las 60 cartas de cada jugador, ahí la partida se guarda. Entonces, el usuario va al modo usuario, donde automaticamente carga partida para que pueda jugar directamente a la partida que yo le he creado. Pero cuando carga da este error:

ERROR in
action number 1
of Draw Event
for object obj_carta:

Trying to draw non-existing sprite.


ERROR in
action number 1
of Draw Event
for object obj_carta:

Trying to draw non-existing sprite.


ERROR in
action

etc etc. todas las cartas fallan al cargar por perder su sprite.
En el orden tengo, en pseucodigo: "si entras en modo master, hay un menu para introducir la direccion de cada carta para que el programa las cargue con sprite_add desde una carpeta. LUEGO guarda partida". LUEGO DE ESO, hay otra parte de codigo con "si estas en modo usuario carga partida"

en teoria cuando el usuario carga la partida debería cargar la partida guardada justo despues de introducir las direcciones de las cartas, pero en el error pone que no encuentra esas direcciones, como si nunca las hubiera introducido!!
Sabéis qué pasa o debo daros más datos? la idea es que yo entro en modo Master para introducir las cartas de cada usuario (debe ser a mano, introduzco la direccion de todas las cartas, por ejemplo pongo /cartas/1-20/carta.png), y ahí se guarda. Luego, si entras en modo usuario, directamente te debería cargar la partida guardada en la que "eras" Master, que da igual pues después de ambos modos solamente te pregunta una contraseña, para asegurar que eres el jugador 1, y hacer tu turno.


-PD: intuyo que el problema puede ser, que el usuario carga una partida donde se han introducido las cartas, pero en su partida no se ha hecho, y al cargar no lo encuentra. Pero no lo creo pues al cargar tambien deberías cargar las cartas que introdujo el Master...
107
Preguntas y respuestas / [Solucionado] Skew al dibujar
Noviembre 18, 2012, 02:32:19 PM
Buenas! Pues el título lo dice todo. Es posible aplicar un efecto Skew en un draw_sprite? (sprites - Transform - Skew).
Si se puede me vendría genial, ya que para las miniaturas de las cartas que tengo en el campo, están en perspectiva conque me molaría hacerles Skew. Si no se puede pues a todas las cartas les pondré una imagen predefinida y ale.
108
buenas, pues la cosa es que no consigo lograr esto sin fallos... mi programa es un juego de cartas
obj_controlador
create:
carta_vacia = sprite_add(working_directory + "/Cartas/carta_screen.png", 0, false, false, 0, 0);

for (i = 0; i < 60; i += 1) {
    DeckA[i] = instance_create(600, 500, obj_carta);
    DeckA[i].sprite = carta_vacia;
    DeckB[i] = instance_create(300, 100, obj_carta);
    DeckB[i].sprite = carta_vacia;
}


con eso creo las 60 cartas con sprites predefinidos (de momento no me he puesto a leerlos). en la carta tengo:

obj_carta
create:
sprite = obj_controlador.carta_vacia;

la duda: a lo mejor no es necesario que en el create de la carta asigne eso, pero sí lo hago en otras partes y en ambas pasa lo mismo: da error al leer obj_controlador.carta_vacia. Por qué?

si no hiciera esa asignacion en el evento create, estaría bien ya que se asigna en el for anterior, o es necesario también en su create? en este caso, si no me equivoco, el valor dado a sprite en el for para cada carta sobreescribe el valor del evento create de cada carta, eso es así?
lo segundo es más pro saber, siempre lo he hecho así sin problema, la cosa es el primer error...
109
Buenas, pues mi idea es algo rara..
para un foro de Devil May Cry estoy desarrollando un juego de cartas, a lo Yugioh, Magic The Gathering, etc, con mecánica de combate y cartas personalizadas (inspirándome en los anteriores, pero cogiendo imágenes para las cartas de los videojuegos Devil May Cry, de lo que trata el foro) Era por posteo pero se me ocurrió que podría usar Game Maker para ello. Claro, los usuarios de Linux y demás como que no sé si podrán, pero leo que el 95% de los usuarios mundiales usan WIndows (es cierto?¿) en ese caso puedo arriesgarme y, no sé, buscar otra manera. Pero usar Game Maker molaría.

Mi idea es la siguiente: los usuarios tendrían descargado el executable del juego de cartas, entonces yo colgaría un savefile específico. Al que le toque, lo descarga y lo carga desde el juego, y allí tendría su turno de batalla: qué cartas le han tocado, su vida, etc. Entonces la gracia sería que podría hacer su turno de forma totalmente interactiva con el programa, el cual a su vez llevaría la cuenta automática de los parámetros de cada carta, vidas del jugador, etc. a demás de permitir barajar la baraja, buscar en ella...
cuando el usuario termina su turno le da a "finalizar turno" y el programa crea otro savegame, entonces el usuario lo cuelga al foro y su rival lo descargará para continuar.
Vamos, como si estuvieran jugando online pero sin online, pasándose los savegames. Por qué? porque no quiero que sea online ya que las diferencias horarias lo hacen imposible, y quiero que puedas hacer tu turno cuando quieras y puedas (podéis decirme qué opináis de esto xD). a demás que no sé hacerlo online ni quiero, tengo mucho trabajo encima de la universidad y quiero que esto sea sencillo, pasando savegames. Y meter online complicaría mucho más al usuario.

la duda es: en el programa sólo habría interfaz y código. No puedo meter las cartas en el executable, son (serán) más de 200, o más de 300, y sobrecargaría el exe, quiero que sea liviano. A demás, si actualizo las cartas, el executable se jode...
así que, qué códigos GML hay para hacer un sprite_add, pero no de un archivo, sino de un link? yo tengo todas las cartas en links, cómo puedo tener esos links guardados en el exe, y que el exe cargue las imágenes de internet?

los links siempre estarían disponibles y nunca cambiarían, si actualizo una carta ésta mantiene su link, y como GM no tiene caché pues genial, conque el único problema que podría dar cargar el link es que el usuario no tenga internet, en cuyo caso cómo podría mostrar un mensaje "Error al cargar la imagen de la carta, asegúrate que tienes conexión a internet" si el cargado falla? porque cuando cargamos por ejemplo con sprite = sprite_add, no sé exactamente qué contiene la variable sprite, un string no es, conque no sé qué hacer para comprar que la carta puede bajarse y evitar que de un mensaje de error

Esto es algo ambicioso, pero a la vez sencillo puesto que tengo mucha experiencia con GM, y como no tengo que programar IA ni nada automático, pues mejor aún.
110
El título lo dice todo. Ya van dos veces que mi personaje se queda haciendo una animación infinitamente cuando CLARAMENTE, en su evento Animation End, debería cambiar a otra al finalizar la anterior, y no cambia. Casi siempre me cambia pero según en qué situaciones no cambia. Tengo localizada una situación donde si hago una acción justo después de un diálogo y mientras me muevo se estanca la animación y nunca acaba.
Esto es por culpa mía, porque algún código interfiere, o es fallo de game maker? porque no es normal que una animació nunca acabe cuando el evento animation end así lo dice, pase la situación que pase...
111
Buenas, pues es algo que no s? si es una paranoya mia, un error de mi PC o teclado o algo, pero me suena haberlo le?do y que pasara siempre...
si pulsas a la vez 3 o m?s teclas, que pasan cosas raras... como que alguna no responde como deber?a?
Programando un sistema de rampas para resbalar y para subir y bajar, del cual estoy superorgulloso por acabarlo (que es m?s f?cil que hacerse un huevo frito, s?lo debes usar fors para moverte y chequear, pero antes no sab?a xD), me di cuenta que va perfecto y s?lo falla si pulso las teclas de direcci?n a la vez o algo raro..
a dem?s, recuerdo que, hace tiempo, quit? el mantener pulsado el salto para saltar m?s alto ya que si manten?as el salto (Z), a la vez que te mov?as en el aire (flecha), si hac?as algo no respond?a (anda, tres teclas a la vez!)

Bueh, existe algo como este fallo y manera de arreglarlo si existiera, o es intr?nseco de game maker o windows? en la PS3 no pasa... (xDD) (es posible que el fallo en mi juego sea propio de mi c?digo, que lo dudo... pero podr?a ser por esto... s?lo quiero saber de este fallo general)
112
Holap! Pues estoy probando modificaciones en 3D, y el tema me tiene algo frito xD Mirad los siguientes ejemplos, reduci?ndolo todo a lo simple.



d3d_transform_set_identity();
d3d_transform_add_translation(0,0,-20);
d3d_transform_add_rotation_y(variable);
d3d_transform_add_translation(x,y,20);
d3d_draw_cylinder(0,0,0,5,5,20,textura,1,1,1,20);
d3d_transform_set_identity();


Seg?n la anterior imagen y el c?digo que puse, yo dibujo un cilindro, de base circular (0,0,5,5), y altura (0,20), o sea, de z=0 a z=20. Entonces, quiero rotar por el eje y la figura DESDE EL PUNTO MARCADO EN LA IMAGEN. O sea, quiero rotarla poniendo el eje de rotaci?n en ese punto. Por lo tanto, hago translaci?n a x=0, y=0, z=-20, ya que el punto est? situado a z=20, con esto situo ESE PUNTO a z=0, lo roto, y lo vuelvo a transportar a x=x, y=y, z=20. Todo esto para preparar el terreno para ESA rotaci?n, tras eso la dibujo tal cual, y cuando modifique la variable, lo rotar? autom?ticamente.

Ahora pongamos que parto verticalmente el cilindro en DOS CILINDROS, uno de z=0 a z=10 y otro de z=10 a z=20, vamos, lo parto en dos. Y quiero que el de abajo pueda rotar libremente sobre su eje superior en z=10, y el de arriba igual. Pero claro... Esto implica varias rotaciones. Yo tengo esta teor?a

d3d_transform_set_identity();
d3d_transform_add_translation(0,0,-10);
d3d_transform_add_rotation_y(valor1);
d3d_transform_add_translation(0,0,-20);
d3d_transform_add_rotation_y(valor2);
d3d_transform_add_translation(x,y,10);
d3d_draw_cylinder(0,0,0,5,5,10,textura,1,1,1,20); //cilindro inferior
d3d_transform_set_identity();

d3d_transform_add_translation(0,0,-20);
d3d_transform_add_rotation_y(valor2);
d3d_transform_add_translation(x,y,20);
d3d_draw_cylinder(0,0,10,5,5,20,textura,1,1,1,20); //cilindro superior
d3d_transform_set_identity();


Explico: pod?is tomarlo como un BRAZO, donde tenemos dos cilindros unidos por el codo: el primer cilindro rota libremente pegado al codo, y el segundo pegado al hombro, pero el primero siempre sigue al segundo. En teor?a, el ?ltimo c?digo que puse, primero rota el cilindro inferior respecto al eje y un valor1, pero respecto a su m?ximo 10. Luego, lo rota todo de nuevo respecto a su valor 20. Y luego rota este segundo cilindro respecto el 20, el superior.

Vamos, que tengo dos cilindros, y quiero que ambos roten sobre el eje y, el de arriba, que llega de z=10 a z=20, rota sobre el punto z=20, y el segundo, de z=0 a z=10, rota sobre el punto z=10, ambos sobre el eje y. Y para conseguir que se muevan como un brazo hacia adelante y atr?s (eje y), puedo rotar libremente el cilindro inferior respecto a z=10, pero luego tengo que rotar este cilindro inferior respecto a z=20 el valor que rotar? el superior, para que siempre su punto maximo encaje con el cilindro superior a modo de codo.

Pero no funciona ya que no puedo hacer dos translations... y necesito hacer dos translations, ya que tengo que rotar DOS VECES DESDE DOS PUNTOS DISTINTOS, conque tengo que transportarlo a un punto, rotar, transportarlo a otro punto y rotar, y es eso lo que falla... >_<



A la pr?ctica, cuando lo ejecuto, el cilindro inferior desaparece. No s? qu? hago mal, quiz?s en algunos lados tengo que usar un "set" y no un "add", no lo tengo claro...
113
Preguntas y respuestas / [Resuelto] Movimiento en 3D
Diciembre 05, 2011, 10:39:55 AM
Buenash! Pues estoy intentando conseguir un movimiento en 3D, he partido de la base del shooter en primera persona Doom de ejemplo y lo he convertido en un juego 3D en TERCERA persona tras mucho trabajo con las vistas, de eso estoy orgulloso. Pero del movimiento...

Quiero que, al pulsar arriba, camine hacia arriba de donde APUNTE LA VISTA. O sea...
si mantienes CONTROL y pulsas DERECHA E IZQUIERDA la vista rota alrededor del personaje.
Ahora, pulsando ARRIBA, el personaje camina al "norte", donde la vista apunta. Abajo, derecha e izquierda igual. Vamos, que se mueve en cuatro direcciones con las 4 flechas, tomando la direcci?n superior hacia donde mira la vista. Y si pulsas control, rotas esta vista.
El problema es moverlo (la vista rotando la tengo)
Us? el siguiente ejemplo que ya ven?a para MOVIMIENTO LATERAL RESPCTO LA VISTA, implementado:

//Gira a la derecha o mu?vete hacia la derecha
if keyboard_check(vk_right) {dir=0; index="run";
if !keyboard_check(vk_control) {var xn,yn; xn=x+sin(direction*pi/180)*velo; yn=y+cos(direction*pi/180)*velo;
if !place_meeting(xn,yn,obj_wall_parent) {x=xn; y=yn;}
} else {direction -= giro;}}

//Gira a la izquierda o mu?vete hacia la izquierda
if keyboard_check(vk_left) {dir=180; index="run";
if !keyboard_check(vk_control) {var xn,yn; xn=x-sin(direction*pi/180)*velo; yn=y-cos(direction*pi/180)*velo;
if !place_meeting(xn,yn,obj_wall_parent) {x=xn; y=yn;}
} else {direction += giro;}}


Si pulsas derecha o izquierda tal cual hace el c?digo de movimiento tal cual sacado del ejemplo. Pero si lo pulsas con control, no se mueve, s?lo rota la direcci?n.

1) a qu? viene multiplicar por pi/180? No es eso un factor de conversi?n para pasar de grados a radianes? Pero no se supone que sin y cos funcionan con grados y siempre le entran grados ya que la direcci?n est? en grados? no cojo eso

2) he intentado cambiar ese c?digo para que funcione para ir ARRIBA Y ABAJO. El c?digo va a derecha o izquierda desde la vista, pero no consigo cambiarlo para que vaya arriba y abajo, alguien me ayuda con eso? D:


EDIT- como v?is no usa nada de velocidades para desplazarse, hace teletransporte con x e y, pero funciona a la perfecci?n, s?lo que no se aplicarlo para el desplazamiento vertical! he probado muchas combinaciones...
114
Buenas, pues s? que es un error com?n, pero es demasiado extra?o. Un amigo al que le pas? un juego creado con GM8, obviamente el .exe, al cargar la barra le sale esa frase. Me dice que su PC tiene menos de 5 a?os, o sea, que es relativamente nuevo, y que incluso le corren juegos como Ragnarok o Tibia, o sea, que su placa gr?fica o comosellame funciona relativamente bien. A m? y a otros amigos les funciona, est? claro que es su ordenador, pero porqu? podr?a pasar si su PC no es nada viejo? Cuales son las principales causas de ese error para que s?lo le pase a ?l de m?s de 3 personas que lo hemos probado y nos va bien?

No uso imagenes grandes, antes usaba 1000x3000 y una amiga me dijo que le daba error, pero lo cambi? y ahora el m?ximo tama?o de los fondos es de 1000x1200 o as?, y como dije, s?lo a ?l le da error, por lo que dudo que sea debido al tama?o de los fondos...
115
Buenas, pues bien, es posible que esta duda ya est? dicha anteriormente, pero son antiguas, conque es posible que ahora la cosa sea diferente, por ello pregunto.

Se pueden correr los executables de los juegos de Game Maker en linux y otras plataformas? Alg?n programa externo para descargar que lo permita?

O? de un programa para linux que permite correr en linux muchos procesos de windows, pero no s?... alguien tiene alguna idea?
116
Hola, pues era sencillamente eso: c?mo puedo guardar en una variable la id del objeto?
He hecho mil veces el t?pico ID=instance_create, pudiendo, desde el objeto, manipular el objeto creador por si habiera varios, algo vital en un juego medio. Pero lo que quiero es guardar en una variable el objeto que se encuentre entre dos puntos! mi c?digo es:
[gml]ID=collision_line(x,y,instance_find(obj_esfera,1).x,instance_find(obj_esfera,1).y,obj_E_parent,1,1);[/gml]

Quiero guardar en la variable ID el objeto que se encuentra entre los puntos marcados, el objeto obj_E_parent.

Lo que quiero es detectar todos los enemigos que se encuentren entre dos puntos y activar un c?digo.
Con el m?todo anterior creo que s?lo detectar?a un enemigo (si no se pueden varios me conformo con s?lo uno) pero no me funciona lo de asignar, ya que collision line devuelve true o false y no la id del objeto. C?mo se podr?a hacer?

Si hay un enemigo en la l?nea funciona perfectamente, pero si hay dos, s?lo funciona con uno. Y si no hay enemigo da error... querr?a que detectara todos los enemigos de la l?nea...
117
Preguntas y respuestas / [3D] Sistema de luces
Octubre 21, 2011, 04:30:15 PM
Buenas! Pues estoy probando cosas en 3D, pero las luces me tienen loco. Tras habilitarlas, pongo esto en el objeto bombilla

//dibuja luz
d3d_set_lighting(true);
d3d_set_shading(true);
draw_set_color(c_white);

d3d_light_enable(index,true);
d3d_light_define_point(index,x,y,z,900000,color);


As?, cada objeto bombilla tiene su propio index, altura y color, que defino en creation code de la room de cada objeto. Pero todo a lo que no le da la luz QUEDA TOTALMENTE NEGRO.
Lo que quiero es que haya RADIACI?N DIFUSA, REFLEXI?N DE LA LUZ o como se llame, o sea, que aunque no le de la luz, se vea un poco oscuro, pero se vea. Podr?a decirse que quiero que TODO SEA VEA... un 70% oscuro, y luego, a lo que le de la luz, claro. Porque que se vea NEGRO TOTALMENTE lo opuesto a la luz, es fatal. Qu? hago?

Podr?a crear m?s luces, pero, por muchas luces que haga, siempre habr? una parte de un objeto con sombra. Alguna idea?

Podr?a usar tambi?n d3d_light_define_direction, pero no s? exactamente c?mo funciona puesto que los argumentos son la direcci?n, pero no dice origen de la luz!
Y aclaro, que sin luz el juego se ve?a bien, pero MUCHAS COSAS se confunden, ya que, al no haber luz, cuesta distinguir cosas, conque necesito la luz para que haya un buen 3D...
118
Buenas, cu?nto tiempo sin preguntar una duda xD
Esto es simple, pero no s? c?mo.
Digamos, cada vez que pulso C, se crea un objeto.
El m?ximo es 10. As?, al crear el n?mero 11, debo destruir el PRIMERO. Y as? cont?nuamente.

Por ejemplo, creo los objetos A, B, C, D, E, F, G, H, I, J (todos son el mismo tipo objeto). Al crear el K, se destruye el A. Al crear el L, se destruye el B, etc.
Puedo destruirlos todos con un bot?n, pero quiero que, si no se pulse el bot?n, se destruyan autom?ticamente LOS M?S VIEJOS cuando el n?mero supera el m?ximo de 10.
C?mo hago eso?
119
Buenas, pues eso, resulta que tengo un objeto enemigo, y cuando comienzo la batalla me lo llevo a otra room. Pues al finalizar, quiero que el objeto regrese a su anterior room, dejando de ser persistente, pero que se resetee, es decir, que todas sus variables, sprite, posici?n.. regrese a las que ten?a nadam?s crearse. C?mo se puede?

El objeto enemigo, a su vez, en create, crea dem?s objetos uqe lo siguen, como su sombra o un objeto que dibuja su vida, pero no s? si deber?a destruirlos para que al resetearlo los cree de nuevo... yo solo quiero que se resetee el enemigo, manteniendo la room persistente todo el tiempo!

Y en el CREATE EVENT, es decir, el codigo que le das a algunos objetos en el editor de rooms y se ejecutan al crearse, eso tambi?n deber?a aplicarse al enemigo reseteado

como hago todo eso?  :-\

Si no hay soluci?n sencilla, puedo hacer las rooms no permanentes y simplemente destruir los enemigos, y al volver a entrar estar?n de nuevo... y todo ir?a bien :3


y tambien, qu? va antes, el evento create del objeto, o el codigo que pones en el editor de room que se activa cuando se crea el objeto? Por que no s? si el codigo que pongo en el objeto en la room se activa antes o despu?s del evento create del propio objeto. Saberlo ahorrar?a molestas alarmas...
120
Buenas, pues hasta ahora para m? esto era f?cil, lo apliqu? muchas veces... pero ahora me falla y seguramente no lo entiendo del todo.

La cuesti?n es, tenemos el prota y los enemigos. Entonces, yo lanzo un ataque al rival. El ataque est? en juego, es decir, tarda en destruirse, 10 steps, un tercio de segundo. Significa que el ataque, que resta vida al contacto, da?ar?a al rival 10 veces, conque restar?a el valor de la vida 10 veces. Pero quiero que s?lo sea una vez y en esas condiciones.

Para ello, creo al rival, en create, esto:
recibe=id; //ID del objeto del cual recibes un ataque, se obtiene al recibirlo, se elimina... cuando acaba
ultimo=id; //ID del ultimo ataque recibido, si coincide con RECIBE; no da da?o


Y en STEP esto:
recibe=other.id;
if ultimo!=recibe {vida-=other.dano; ultimo=other.id;}


es simple. Siempre, siempre que recibes un ataque, justo antes de recibirlo todo, se guarda la id del ataque recibido en tu variable "recibe". A continuaci?n, checas si "recibe", es decir, la id del objeto atacante, coincide con "ultimo". Si son distintas, realiza el da?o, y, tras el da?o, "utlimO" vale la id rival.

Esto significa que SIEMPRE QUE RECIBA ESE ATAQUE por primera vez, m?s espec?ficamente ese objeto concreto, ya que el ataque se realiza muchas veces, la primera vez siempre me da?a puesto que recibe no ser? igual que ultimo. Pero, tras da?arme, como ultimo valdr? igual que recibe, no funciona.

Un c?digo perfecto para que el ataque s?lo dale al rival una vez, pero a la vez el ataque pueda da?ar a varios rivales a la vez, ya que si destruyo el ataque despues de golpear, no podr? usarse para varios rivales a la vez, y ese no es el caso

La teoria es correcta, pero en la pr?ctica no funciona y le resta al rival toda la vida de golpe, como si le da?ara 10 veces seguidas. Qu? falla? D:

Cabe decir que tambi?n he hecho esto:
recibe=other.id;
if ultimo.id!=recibe.id {vida-=other.dano; ultimo=other.id;}


Checando, no la variable, sino la variable "id" de la variable, s?lo cuando checa y no cuando setea, ya que creo que se usaba as?, tomando a "recibe" como el objeto rival, y checando "id" del objeto rival a trav?s de la variable, pero tampoco funciona! Sigo mat?ndolo de un solo ataque!