Ir ao conteúdo

Posts recomendados

Postado

Então, eu estou tentando fazer um projeto da faculdade no qual fomos desafiados a fazer um jogo, que não fosse de tabuleiro, E eu decidi fazer um "clone" do SpaceInvaders, mas a exigência da faculdade é que ele seja relacionado ao meio ambiente então tenho algumas imagens de diferentes tipos de lixo para destruir. Estou seguindo esse guia: http://zetcode.com/tutorials/javagamestutorial/spaceinvaders/ mas gostaria de inserir mais de uma imagem de alien mas não tenho a menor ideia de como fazer.

  • Curtir 1
Postado

@Thiago Pinto Ferreira , se entendi, você quer fazer uma animação para as naves. No caso, você precisa trocar uma imagem por outra, por exemplo fazer uma "alien2.png" trocando a cor da cabine, sei lá. Porém, para isso, você precisa medir o tempo que já passou. Do modo que está, ele vai chamar o método act() nas classes Player e Alien mais ou menos a cada 17 ms, então dá perto de 60 quadros por segundo.

 

Assim, a sua classe Alien poderia ficar assim:

 

package com.zetcode.sprite;

import javax.swing.ImageIcon;

public class Alien extends Sprite {

    private Bomb bomb;
    // array para as imagens da animação
    ImageIcon frames[];
    int currentImage = 0;
    int currentFrame = 0;

    public Alien(int x, int y) {

        initAlien(x, y);
    }

    private void initAlien(int x, int y) {

        this.x = x;
        this.y = y;

        bomb = new Bomb(x, y);
        // array para as imagens da animação
        frames = new ImageIcon[2];
        frames[0] = new ImageIcon("src/images/alien.png");
        frames[1] = new ImageIcon("src/images/alien.png");
//        var alienImg = "src/images/alien.png";
//        var ii = new ImageIcon(alienImg);

        setImage(frames[0].getImage());
//        setImage(ii.getImage());
    }

    public void act(int direction) {

        this.x += direction;
        currentFrame++;
        if (currentFrame >= 30) {
        	currentFrame = 0;
        	currentImage++;
        	if (currentImage > 1) {
        		currentImage = 0;
        	}
        	setImage(frames[currentImage].getImage());
        }
    }

    public Bomb getBomb() {

        return bomb;
    }

    public class Bomb extends Sprite {

        private boolean destroyed;

        public Bomb(int x, int y) {

            initBomb(x, y);
        }

        private void initBomb(int x, int y) {

            setDestroyed(true);

            this.x = x;
            this.y = y;

            var bombImg = "src/images/bomb.png";
            var ii = new ImageIcon(bombImg);
            setImage(ii.getImage());
        }

        public void setDestroyed(boolean destroyed) {

            this.destroyed = destroyed;
        }

        public boolean isDestroyed() {

            return destroyed;
        }
    }
}

 

Não é a maneira mais elegante ou bonita rs, mas é a mais básica e irá funcionar. O ideal seria implementar isso na classe Sprite, ou criar uma classe filha, AnimatedSprite, para separar a parte das imagens/animações do alien e player. Tenho um "engine" que eu fiz a muito tempo atrás aqui: https://github.com/dudaskank/lighthawkwings - fazia parte do MEU projeto final da pós, que eu deveria ter apresentado mas enfim... o demo dele está na classe com.lighthawkwings.sample.GameTest, tem algum comentário nas classes, eu segui um ou dois livros na época para programar ele, que não vou lembrar do nome hehe. Talvez dê alguma ideia nova pra você implementar.

  • Curtir 1
Postado

Olá, obrigado pelas dicas, vou testar sim, mas viu, gostaria de que ele gerasse o mapa já com todos os aliens randomizados, talvez isso não ficou claro. Outra coisa, agora que o odigo está pronto(sem a parte que eu pedi aqui) estou tendo um problema para carregar as imagens externas, agora estou no celular mas logo que eu sentar no Pc posto aqui as classes relacionadas a isso, também.

  • Curtir 1
  • 2 semanas depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!