[Devlog] Mi primer juego - Enemigos que llegan desde el espacio exteri

Lecherito

#30 Si lo que tienes que hacer es subirlo a github para que te podamos dar consejos de verdad, no a ciegas

1 1 respuesta
GlatoR

#31 Tienes razón, Lecherito, y supongo que lo haré. Mi pregunta anterior la dije por si podría ser un error muy de novato, como lo del operador que comentaste que quizás podría haberlo puesto mal (si eso era lo que te referías) y alguien me lo decía para comprobarlo.

No quiero que se convierta este hilo en "ILLOS AYUDADME A HACER EL JUEGO PORQUE NO SÉ NADA" xD. Soy muy novato programando y a lo mejor me dais buenos consejos para el código, pero que en ese momento pueden salir de mi entendimiento y no puedo incluirlos, así que os ahorro molestias innecesarias.

Si alguna vez estoy atascado realmente, sin ninguna pondré mi código, y a la larga también la colocaré para que lo veáis. Aun así si alguien tiene curiosidad lo paso por privado :P

Dicho en pocas palabras, yo no soy de pedir algo al menos que lo necesite de verdad.

J

Qué envidia! A ver si termino pronto la parte de diseño del Master y empiezo a picar código :)

A FAVs como dicen por aquí

1
GlatoR

Pequeña actualización, aunque me tuve que comer bastante la cabeza el día de ayer. Me vino la solución justo cuando apagué el PC y lo apunté en un papel para hacerlo hoy xD.

Cuando un enemigo es destruido se vuelve invisible, pierde el hitbox y deja de disparar. Tantos el enemigo invisible como los proyectiles son eliminados tras llegar al final.

NSFW

Ahora tengo una duda, la cual si alguien me puede aconsejar se lo agradecería.

No quiero que el enemigos disparen hacia delante, sino que su misil vaya dirigido a la posición que se encontraba el jugador por última vez cuando el fue creado.

Tengo que crear un método que coja las coordenadas del jugador y de la nave que lanza el proyectil. Con ellas podré saber la dirección en diagonal donde tendrá que dirigirse el proyectil, pero a partir de ahí es cuando me pierdo por completo. ¿Hago un array bidimensional con los valores X e Y del rectángulo que se crea entre ambas naves? aun así debo de jugar con la velocidad (actualmente la tengo en int, supongo que deberé de cambiarlo a un float para que sea fluido).

A lo mejor se puede hacer una manera más fácil, ojalá xD

1 respuesta
totespare

#34 De qué manera se mueven los misiles de los "malos"? Tendrán un vector director, no? Lo que tienes que hacer en resumidas cuentas es que tu vector dirección sea la posición del player en el momento del disparo, nada más. Y ese es la posición del player menos la del origen.

1 respuesta
GlatoR

#35 Gracias hermoso

Lo tengo de esta manera:

En la clase Enemy hay un método que automáticamente crea y agrega un misil a un ArrayList

	public void shoot() {

		if (prepared && visible) {
                        // Aquí le indico donde tiene que aparecer (comentario que te hago pa ti xD)
			enemyMissile.add(new Missile(x - WENEMY, y));  
			prepared = false;

		}
	}

También habría que cambiar algo en el movimiento del misil, no? Ya que tengo puesto lo siguiente:

Esto forma parte de la clase del proyectil.

public void moveMissile2() {

		x -= 3;
		// y += 0.1f;

		if (x < 0) {

			waste = true; // con el update de
		}

	}

Si el misil usa ese método no irá donde se encuentra el jugador, no? me refiero, el vertical que coja no sé si valdrá como el x o directamente seguirá hacia delante.

1 respuesta
totespare

#36 échate un ojo a estos dos links:

https://gamedev.stackexchange.com/questions/84017/how-to-move-an-object-uniformly-from-one-point-to-another-at-a-fixed-angle
https://gamedev.stackexchange.com/questions/48119/how-do-i-calculate-how-an-object-will-move-from-one-point-to-another/48191#48191

Básicamente lo que tienes que hacer es ir moviendo tu misil en la dirección resultante de restar la posición del player menos la del misil, y ese movimiento hacerlo uniforme mediante tu deltaTime.

1 1 respuesta
GlatoR

Muchas gracias por los enlaces, hermoso ^^

1 respuesta
kesada7

#38 Tienes ya el código en Github? Sino como consejo es que empieces a usarlo cuanto antes. A parte de que te vamos a poder ayudar mejor, vas a esforzarte en escribir código más limpio y legible sabiendo que otros lo van a ver xDD Y acostumbrarte a usar un sistema de control de versiones es lo mejor.

1 respuesta
GlatoR

#39 Me has pillado!

Una de las razones por lo que no lo he subido todavía es porque quiero terminar la primera fase (ya mismo, pongo lo de los misiles y ya) y empezaré a mejorar el código para subirlo. Aunque tengo nombres en inglés y otros pocos en español. En eso seguro que me criticáis xD

Me vendrá bien para coger soltura :p

GlatoR

#37 solucionado

Como me dijo @Akiramaster , parece Jiren esquivando golpes HAHAHAHAHA

Tengo que afinarlo bastante. Primero que el proyectil una vez llegado al punto siga su trayectoria natural en vez de pararse y que cuando una nave pase de largo deje de disparar.

Luego por la noche lo veo

P.D: Es probable que ese mismo movimiento lo use para otro tipo de naves enemigas que tengo pensado en introducir.

1 respuesta
totespare

#41 cómo lo estás haciendo?

1 respuesta
GlatoR

#42

Lo hice con este método, que se encuentra en la clase Missile.


	public void aondeva(float playerX , float playerY)  {
		
		
		
		if (!detected) {
			
			detectedX = playerX;
			detectedY = playerY;
			detected = true;
			
		}
		else {
		
			float dx = detectedX - x;
			float dy = detectedY - y;
			
			float length = (float) Math.sqrt(dx*dx+dy*dy);
			
			
			dx /= length;
			dy /= length;
			
			dx *= SPEED;
			dy *= SPEED;
			
			velocityX = dx;
			velocityY = dy;
			
			moveMissile2();
			
		}
		
	}

Este es el método moveMissile2()


	public void moveMissile2() {

		x += velocityX;
		y += velocityY;
		
		
		if (x < 0) {

			waste = true; 
		}

	}
1 respuesta
pirri1721

#43 aondeva :smiley:

EDIT: Dale caña, tío, que a mi ya me parece brutal que te muevas eso en java xD

1
GlatoR

Pensando en el futuro, veis bien usar el patrón factory para las naves enemigas? distinto tipos de clase de naves me refiero

1 respuesta
totespare

#45 pues ni bien ni mal, si te apetece usarlo, hazlo, sin más xD.

1