Mudando imagem de um Sprite dinamicamente[RESOLVIDO]

Bom, estou fazendo um protótipo de jogo usando Cocos2D, comprei o Livro Desenvolvendo jogos para Android com o cocos2d do Anderson Leite, no entanto, estou indo um pouco alem e preciso que o meu inimigo mude de imagem quando mudar sua direção ( a ideia eh fazer ele andar para os lados). No entanto não estou conseguindo mudar a imagem do inimigo para que de impressão que ele estaria de fato andando para os lados.

Alguem teria alguma dica? Obrigado

Mas tu não muda o sprite em si, tu começa um novo, com uma nova animação.

Então teria que criar um novo sprite sempre que for mudar o sprite?

eu fiz assim

O metodo que cria o objeto inimigo


	private void addObjects() {
		this.inimigo=new Inimigo(Assests.INIMIGOESQ);
		this.addChild(this.inimigo);
		
	}

A o objeto (classe) inimigo

package br.projeto.passelivre.objetos;

import org.cocos2d.nodes.CCSprite;
import org.cocos2d.types.CGPoint;

import android.util.Log;
import br.projeto.passelivre.config.Assests;
import static br.projeto.passelivre.config.DeviceSettings.screenWidth;
import static br.projeto.passelivre.config.DeviceSettings.screenHeight;
import static br.projeto.passelivre.config.DeviceSettings.screenResolucion;

public class Inimigo extends CCSprite {
	
	private float x,y;
	private int count;
	private CCSprite direcaoInimigo;
	
	public Inimigo(String imagem) {
		super(imagem);
		this.count=0;
		this.y=(screenHeight() / 3.0f)-80.0f;
		this.x=screenWidth() / 2.0f - 40.0f;
		this.schedule("update");
	}
	
	public void update(float dt){
		if(count <= 60){
			count++;
			x+=1;
			Log.i("Jogo", "esquerda");
			if(count > 60){
				direcaoInimigo = CCSprite.sprite(Assests.INIMIGOESQ);				
			}
		} else if(count<=120){
			count++;
			x-=1;
			Log.i("jogo", "Direita");
			if(count>120){
				direcaoInimigo = CCSprite.sprite(Assests.INIMIGODIR);				
				count=0;
			}
		}
		
		this.addChild(direcaoInimigo);
		this.setPosition(screenResolucion(CGPoint.ccp(x, y)));
	}

}

Aqui ele funciona, no entanto, cria 2 inimigos, o inimigo criado no construtor e depois no loop, e eu tenho a impressão que fica criando varios com o addChild, porem como ficam todos andando no mesmo lugar e direção, parece q eh só um.

Não tem como destruir o antigo quando cria um novo?
Eu realmente não sei… estava estudando este livro, mas parei e fui para o Unity!
Alias, uma maravilha! Estou adorando. E é fácil, bem fácil.

Vou ter de repetir aqui: cara, a Unity é incrível.
Larga esse Cocoas e vem pro mundo da Unity, hehehehe

[quote=Artur Bernardo]Vou ter de repetir aqui: cara, a Unity é incrível.
Larga esse Cocoas e vem pro mundo da Unity, hehehehe[/quote]

Baixei ele ontem, vou dar uma fuçada :smiley: Aproveitando, tu tem alguns tutoriais pra me indicar?

No site deles tem vídeo aulas “for dummys”

Vai na ordem mesmo.
Comecei vendo os videos Beginner Editor, que ensinam a distribuição das funcionalidades na tela do software.

Agora estou vendo os vídeos dos scripts.
Começou chato d+ essa parte, ensinando até as estruturas de controle e loopings… mas agora está mostrando algumas funcionalidades, como capturar o clique do botão.
Com essas duas sessões de vídeos, já dá para criar um jogo “no braço”.

Conversei com um amigo que entende bastante da Unity, e ele disse que tem como criar os sistemas de market integrados com o google play e a apple store.

Em casa eu tenho algumas coisas salvas no PC, mas ainda não vi elas… quando der eu posto aqui.

Eu gostei muito do cocos2D, o problema é a falta de documentação em java para pesquisa, o livro da Casa do código trata o assunto de forma muito básica.

Ele é legal sim… foi bom para mim entender como funciona um jogo.
Aprender nunca é d+!

E eu também senti com a falta de documentação.

Não adicione um novo child no loop: atualize o atual e redesenhe-o.

Resolvi a questão de fazer o inimigo se virar ao mudar de posição, olhei uns exemplos feitos para Iphone.

Bastou indicar pro android quando fazer a virada com o comando objeto.setFlipX(boolean);

ficou assim

[code]
package br.projeto.passelivre.objetos;

import org.cocos2d.nodes.CCSprite;
import org.cocos2d.types.CGPoint;

import android.util.Log;
import br.projeto.passelivre.config.Assests;
import static br.projeto.passelivre.config.DeviceSettings.screenWidth;
import static br.projeto.passelivre.config.DeviceSettings.screenHeight;
import static br.projeto.passelivre.config.DeviceSettings.screenResolucion;

public class Inimigo extends CCSprite {

private float x,y;
private int count;
private CCSprite direcaoInimigo;

public Inimigo(String imagem) {
	super(imagem);
	this.count=0;
	this.y=(screenHeight() / 3.0f)-80.0f;
	this.x=screenWidth() / 2.0f - 40.0f;
	this.setFlipX(true);
	this.schedule(&quot;update&quot;);
}

public void update(float dt){
	if(count &lt;= 60){
		count++;
		x+=1;
		Log.i(&quot;Jogo&quot;, &quot;esquerda&quot;);
		if(count &gt; 60){
			this.setFlipX(false);
			//direcaoInimigo = CCSprite.sprite(Assests.INIMIGOESQ);				
		}
	} else if(count&lt;=120){
		count++;
		x-=1;
		Log.i(&quot;jogo&quot;, &quot;Direita&quot;);
		if(count&gt;120){	
			this.setFlipX(true);
			//direcaoInimigo = CCSprite.sprite(Assests.INIMIGODIR);				
			count=0;
		}
	}		
	this.setPosition(screenResolucion(CGPoint.ccp(x, y)));
}

}[/code]

Assim ele a cada mudança de direção irá "olhar" para o lado correto. Ainda falta aprender a animar o boneco para dar impressao que esta caminhando, mas isso ai é outro assunto…

Sobre o Unity, to dando uma bisoiada, me parece interessante, vou dar uma estudada.

Adiantando sobre a animação, seu CSSprite deve receber um Array de imagens para ser um sprite animado, dai basta passar um update(long ups) para alguém que no onDraw ele vai desenhar o momento correto.

Eu estou tentando usar uma sugestão de usar as ferramentas do proprio cocos2d, tipo, usar frames para animar. Mas vou tentar tambem tua sugestão, pq a principio não estou conseguindo usar os frames.