<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=LIBGDX_tarefa_2_6_Alternativa</id>
	<title>LIBGDX tarefa 2 6 Alternativa - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=LIBGDX_tarefa_2_6_Alternativa"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_tarefa_2_6_Alternativa&amp;action=history"/>
	<updated>2026-10-17T11:28:47Z</updated>
	<subtitle>Historial de revisiones de esta página en el wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_tarefa_2_6_Alternativa&amp;diff=733&amp;oldid=prev</id>
		<title>Wiki: Página creada con «Tal como comentaba anteriormente temos moitas formas de programar o xogo, algunhas máis óptimas que outras.    Normalmente canto máis flexible é a solución máis compl...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_tarefa_2_6_Alternativa&amp;diff=733&amp;oldid=prev"/>
		<updated>2016-03-03T19:29:18Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «Tal como comentaba anteriormente temos moitas formas de programar o xogo, algunhas máis óptimas que outras.    Normalmente canto máis flexible é a solución máis compl...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Tal como comentaba anteriormente temos moitas formas de programar o xogo, algunhas máis óptimas que outras. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Normalmente canto máis flexible é a solución máis complexa é de facer, pero despois nos permite engadir novos elementos moito máis rápido.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vos vou amosar unha posible solución ó problema dos elementos móbiles. Loxicamente non tedes que facela, simplemente queda como posible alternativa á forma que estamos a desenrolar, existindo outros métodos seguro que máis óptimos...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase ElementoMovil&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Representa calquera elemento móbil do xogo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; &amp;gt;&lt;br /&gt;
public class ElementoMobil extends Personaxe {&lt;br /&gt;
&lt;br /&gt;
	public static enum TIPOS_ELEMENTOS {COCHE, AUTOBUS, TRONCO, ROCA};&lt;br /&gt;
	private TIPOS_ELEMENTOS tipo;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Filas que se correponden con os elementos do xogo que se moven&lt;br /&gt;
	 * @param fila: dende 0 ata 3 son para os coches; dende 4 a 6 son para os troncos&lt;br /&gt;
	 */&lt;br /&gt;
	public ElementoMobil(){&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	public ElementoMobil(Vector2 posicion, Vector2 tamano, float velocidade_max,TIPOS_ELEMENTOS tipo) {&lt;br /&gt;
		super(posicion, tamano, velocidade_max);&lt;br /&gt;
		this.setTipo(tipo);&lt;br /&gt;
		// TODO Auto-generated constructor stub&lt;br /&gt;
		&lt;br /&gt;
		velocidade=velocidade_max;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public TIPOS_ELEMENTOS getTipo() {&lt;br /&gt;
		return tipo;&lt;br /&gt;
	}&lt;br /&gt;
	public void setTipo(TIPOS_ELEMENTOS tipo) {&lt;br /&gt;
		this.tipo = tipo;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void update(float delta) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
&lt;br /&gt;
		setPosicion(posicion.x+delta*velocidade,posicion.y);&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nesta clase non hai moito que comentar.&lt;br /&gt;
&lt;br /&gt;
Agora creo unha nova clase que vai ter nun array todos os elementos móbiles. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Elementos&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Representa todos os elementos móbiles do xogo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
public class Elementos {&lt;br /&gt;
&lt;br /&gt;
	private int posfilas[]={220,260,300,345,365,380,400,40,100};&lt;br /&gt;
	private int velocidades[]={-35,95,-55,50,-45,35,-65,30,-50};&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	private Array&amp;lt;ElementoMobil&amp;gt; elementos;&lt;br /&gt;
	private float tempoParaCrearMax;&lt;br /&gt;
	private float tempoParaCrearMin;&lt;br /&gt;
	&lt;br /&gt;
	private int numElementos;&lt;br /&gt;
	&lt;br /&gt;
	private float crono;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	public Elementos(float tempomin,float tempomax,int numelementos){&lt;br /&gt;
		elementos = new Array&amp;lt;ElementoMobil&amp;gt;();&lt;br /&gt;
		setTempoparacrearMax(tempoParaCrearMax);&lt;br /&gt;
		crono = tempoParaCrearMax;&lt;br /&gt;
		setTempoparacrearMin(tempomin);&lt;br /&gt;
		setNumelementos(numelementos);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private int getFila(ElementoMobil.TIPOS_ELEMENTOS tipoelem){&lt;br /&gt;
		int fila=0;&lt;br /&gt;
		&lt;br /&gt;
		switch(tipoelem){&lt;br /&gt;
		case AUTOBUS:&lt;br /&gt;
		case COCHE:&lt;br /&gt;
			fila = MathUtils.random(3,6);&lt;br /&gt;
			break;&lt;br /&gt;
		case ROCA:&lt;br /&gt;
			fila = MathUtils.random(7,8);&lt;br /&gt;
			break;&lt;br /&gt;
		case TRONCO:&lt;br /&gt;
			fila = MathUtils.random(0,2);&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			break;&lt;br /&gt;
		&lt;br /&gt;
		}&lt;br /&gt;
		return fila;&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void engadirElemento(ElementoMobil.TIPOS_ELEMENTOS tipoelem){&lt;br /&gt;
		int fila=0;&lt;br /&gt;
		fila = getFila(tipoelem);&lt;br /&gt;
		&lt;br /&gt;
		ElementoMobil elemento = new ElementoMobil();&lt;br /&gt;
		&lt;br /&gt;
		elemento.posicion = new Vector2();&lt;br /&gt;
		elemento.tamano = new Vector2();&lt;br /&gt;
		&lt;br /&gt;
		switch(tipoelem){&lt;br /&gt;
		case AUTOBUS:&lt;br /&gt;
			elemento.setTipo(TIPOS_ELEMENTOS.AUTOBUS);&lt;br /&gt;
			elemento.setTamano(30,15);&lt;br /&gt;
			break;&lt;br /&gt;
		case COCHE:&lt;br /&gt;
			elemento.setTipo(TIPOS_ELEMENTOS.COCHE);&lt;br /&gt;
			elemento.setTamano(20,15);&lt;br /&gt;
			break;&lt;br /&gt;
		case ROCA:&lt;br /&gt;
			elemento.setTipo(TIPOS_ELEMENTOS.ROCA);&lt;br /&gt;
			elemento.setTamano(60,60);&lt;br /&gt;
			break;&lt;br /&gt;
		case TRONCO:&lt;br /&gt;
			elemento.setTipo(TIPOS_ELEMENTOS.TRONCO);&lt;br /&gt;
			elemento.setTamano(80,40);&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			break;&lt;br /&gt;
		&lt;br /&gt;
		}&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
		elemento.velocidade = velocidades[fila];&lt;br /&gt;
		// Os pares sean da esquerda&lt;br /&gt;
		if(velocidades[fila] &amp;gt;0)	&lt;br /&gt;
			elemento.setPosicion(-elemento.tamano.x, posfilas[fila]);&lt;br /&gt;
		else&lt;br /&gt;
			elemento.setPosicion(Mundo.TAMANO_MUNDO_ANCHO, posfilas[fila]);&lt;br /&gt;
		&lt;br /&gt;
		for (ElementoMobil elem : elementos){&lt;br /&gt;
			if (Intersector.overlaps(elem.getRectangulo(), elemento.getRectangulo())){&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		elementos.add(elemento);&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void update(float delta){&lt;br /&gt;
		crono-=delta;&lt;br /&gt;
		for (ElementoMobil elem : elementos){&lt;br /&gt;
			elem.update(delta);&lt;br /&gt;
		}&lt;br /&gt;
		for (ElementoMobil elem : elementos){&lt;br /&gt;
			if (elem.velocidade&amp;lt;0)	{ // Vai cara a esquerda&lt;br /&gt;
				if (elem.posicion.x &amp;lt;= -elem.tamano.x){&lt;br /&gt;
					elementos.removeValue(elem, true);&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else{&lt;br /&gt;
				if (elem.posicion.x &amp;gt;= Mundo.TAMANO_MUNDO_ANCHO){&lt;br /&gt;
					elementos.removeValue(elem, true);&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public Array&amp;lt;ElementoMobil&amp;gt;getElementos(){&lt;br /&gt;
		return elementos;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public float getCrono(){&lt;br /&gt;
		return crono;&lt;br /&gt;
	}&lt;br /&gt;
	public void setCrono(float tempo){&lt;br /&gt;
		crono=tempo;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public float getTempoparacrearMax() {&lt;br /&gt;
		return tempoParaCrearMax;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setTempoparacrearMax(float tempoparacrear) {&lt;br /&gt;
		this.tempoParaCrearMax = tempoparacrear;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public float getTempoparacrearMin() {&lt;br /&gt;
		return tempoParaCrearMin;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setTempoparacrearMin(float tempoparacrearmin) {&lt;br /&gt;
		this.tempoParaCrearMin = tempoparacrearmin;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public int getNumelementos() {&lt;br /&gt;
		return numElementos;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setNumelementos(int numelementos) {&lt;br /&gt;
		this.numElementos = numelementos;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expliquemos previamente dita clase:&lt;br /&gt;
&lt;br /&gt;
*Liñas 3-4: representan cada unha das filas de elementos móbiles. Indican a súa posición e velocidade. Lembrar que todos os elementos móbiles de cada liña teñen a mesma velocidade.&lt;br /&gt;
*Liña 7: array que ten todos os elementos móbiles de todas as filas. Por simplificar, este array vai levar todos os coches (un obxecto desta clase), todas as rochas (outro obxecto desta clase) e todos os troncos (outro obxecto desta clase).&lt;br /&gt;
*Liñas 8-9: esta clase vai crear aleatoriamente os elementos. Cando creamos un novo elemento xeramos un número aleatorio entre estes dous números, que será o tempo que terá que pasar ata instancialo.&lt;br /&gt;
*Liña 11: número máximo de elementos na pantalla. Por exemplo, podemos facer que non haia máis de 20 coches en pantalla (incluídas todas as filas).&lt;br /&gt;
*Liña 13: cronómetro usado para crear novos elementos.&lt;br /&gt;
*Liñas 24-44: método getFila: método que devolve unha fila de forma aleatoria onde se vai crear un novo elemento móbil. Depende do tipo (coche, tronco e rocha) teremos rango de filas diferentes.&lt;br /&gt;
*Liñas 46-93: método engadirElemento: engade un novo elemento. Xa falaremos da clase Intersector no punto de xestión das colisións.&lt;br /&gt;
*Liñas 95-114: método update: actualiza a posición de todos os elementos. Se chegan os limites eliminao do array.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Mundo&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Engadimos os elementos móbiles.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; &amp;gt;&lt;br /&gt;
    private Elementos vehiculos;&lt;br /&gt;
    private Elementos troncos;&lt;br /&gt;
    private Elementos rocas;&lt;br /&gt;
    &lt;br /&gt;
    public Mundo(){&lt;br /&gt;
    	alien = new Alien(new Vector2(100,20), new Vector2(15,15),100);&lt;br /&gt;
    	nave = new Nave(new Vector2(0,480),new Vector2(40,20),60);&lt;br /&gt;
    	&lt;br /&gt;
    	vehiculos = new Elementos(1.5f,3f,20);&lt;br /&gt;
    	troncos = new Elementos(2f,5f,6);&lt;br /&gt;
    	rocas = new Elementos(2f,5f,3);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
	public Elementos getVehiculos(){&lt;br /&gt;
		return vehiculos;&lt;br /&gt;
	}&lt;br /&gt;
	public Elementos getTroncos(){&lt;br /&gt;
		return troncos;&lt;br /&gt;
	}&lt;br /&gt;
	public Elementos getRocas(){&lt;br /&gt;
		return rocas;&lt;br /&gt;
	}&lt;br /&gt;
    ...................&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Estamos a engadir 20 coches, 6 troncos e 3 rochas. Se fai de forma aleatoria e a medida que se van eliminando do array se van engadindo novos elementos. Isto se fai na clase controladora.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase ControladorXogo&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Xestionamos os elementos móbiles.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
	private void controlarVehiculos(float delta){&lt;br /&gt;
&lt;br /&gt;
		// Actualizamos posición e elininamos&lt;br /&gt;
		Elementos vehiculos = meuMundo.getVehiculos();&lt;br /&gt;
		vehiculos.update(delta);&lt;br /&gt;
&lt;br /&gt;
		// Engadimos os vehiculos&lt;br /&gt;
		 if (vehiculos.getCrono()&amp;lt;=0){&lt;br /&gt;
		vehiculos.setCrono(MathUtils.random(vehiculos.getTempoparacrearMin(),vehiculos.getTempoparacrearMax()));&lt;br /&gt;
			if (vehiculos.getElementos().size&amp;lt;vehiculos.getNumelementos()){&lt;br /&gt;
				int rand = MathUtils.random(1);&lt;br /&gt;
				ElementoMobil.TIPOS_ELEMENTOS tipo;&lt;br /&gt;
				if (rand==0)&lt;br /&gt;
					tipo = TIPOS_ELEMENTOS.AUTOBUS;&lt;br /&gt;
				else&lt;br /&gt;
					tipo = TIPOS_ELEMENTOS.COCHE;&lt;br /&gt;
					&lt;br /&gt;
				vehiculos.engadirElemento(tipo);&lt;br /&gt;
				vehiculos.engadirElemento(tipo);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// Actualizamos posición e elininamos&lt;br /&gt;
		Elementos troncos = meuMundo.getTroncos();&lt;br /&gt;
		troncos.update(delta);&lt;br /&gt;
&lt;br /&gt;
		// Engadimos os troncos&lt;br /&gt;
		if (troncos.getCrono()&amp;lt;=0){&lt;br /&gt;
			troncos.setCrono(MathUtils.random(troncos.getTempoparacrearMin(),troncos.getTempoparacrearMax()));&lt;br /&gt;
			if (troncos.getElementos().size&amp;lt;troncos.getNumelementos()){&lt;br /&gt;
				troncos.engadirElemento(TIPOS_ELEMENTOS.TRONCO);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// Actualizamos posición e elininamos&lt;br /&gt;
		Elementos rocas = meuMundo.getRocas();&lt;br /&gt;
		rocas.update(delta);&lt;br /&gt;
&lt;br /&gt;
		// Engadimos os troncos&lt;br /&gt;
		if (rocas.getCrono()&amp;lt;=0){&lt;br /&gt;
			rocas.setCrono(MathUtils.random(rocas.getTempoparacrearMin(),rocas.getTempoparacrearMax()));&lt;br /&gt;
			if (rocas.getElementos().size&amp;lt;rocas.getNumelementos()){&lt;br /&gt;
				rocas.engadirElemento(TIPOS_ELEMENTOS.ROCA);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void update(float delta){&lt;br /&gt;
		&lt;br /&gt;
		controlarVehiculos(delta);&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
</feed>