Forums » Allegro

Atirando com Allegro

    • 467 posts
    5 de maio de 2013 20:24:09 ART

    Atirando com Allegro

    Download:

    http://xiglute.com/public/efile/65/2f/2f36_4b32.rar?c=6f29


    Muita gente tem dificuldade com criação em tiros, em um jogo de Naves, por exemplo. Pra ajudar, eu criei um tutorial BEM simples de como fazer uma nave, em um jogo de shooter, atirar. É um shooter vertical, bem simples de fazer. Utilizei aqui C, nada de Orientação a Objetos, porque acho que isso aqui estimula a idéia do que fazer, depois basta transformar isso em objetos pra criar o seu com C++.

    Bom, primeiro de tudo, este sistema utiliza um vetor de tiros com tamanho limitado. Ou seja, você vai ter um número máximo de tiros simultâneos. Também seria possível fazer isso utilizando uma lista, para que os tiros fossem ilimitados, mas acho que este método é bem eficaz, se você setar um número máximo certo.

    #define MAX_TIROS                    10

    Eu setei 10, porque para este caso foi o suficiente, mas se você achar que está sendo pouco, vai colocando mais, até ver que está legal. Depois disso, vamos criar uma estrutura, que vai conter as informações de cada tiro e um BITMAP, que é a imagem do tiro:

    struct Tiro
    {
        // Coordenadas
        int x, y;
        // Velocidade
        int vel;
        // O Tiro está ativo?
        int ativo;
    }tiro[MAX_TIROS];

    // BITMAP do tiro... como todos os tiros são iguiais, agente só cria um
    BITMAP *img_tiro;

    // Enum que contém os estados de ativo
    enum
    {
        ATIVO,
        NAO_ATIVO
    };

    Muito bem, ela contém as coordenadas de cada bala, sua velocidade, e uma flag para verificar se ela está ativa, vamos criar uma função para inciar todos os tiros, assim:

    void iniciar_tiros()
    {
        int i;
        for (i = 0; i < MAX_TIROS; i++)
        {
            // Primeiro de tudo setar que todos os tiros não estão ativos
            tiro.ativo = NAO_ATIVO;
            // Velocidade do tiro
            tiro.vel = 40;
        }
        
        // Você pode carregar uma imagem do tiro, mas eu vou "desenhá-la"
        img_tiro = create_bitmap(15, 2);
        clear_to_color(img_tiro, 0xFFFFFF);
    }

    Essa função define que todos os tiros estão não ativos e também carrega a imagem do tiro, eu, no caso, só "desenhei".

    Ok, agora nós temos que criar uma função que irá exibir os tiros ativos na tela, e atualizá-los quanto às suas posições. Lá vai:

    void show_tiros()
    {
        // Essa função não só mostra os tiros na tela, como os atualiza.
        // Vai mudando sua posição e verifica se ele sai da tela (desativa-o).

        int i;
        for (i = 0; i < MAX_TIROS; i++)
        {
            if (tiro.ativo == ATIVO)
            {
                draw_sprite(buffer, img_tiro, tiro.x, tiro.y);
                
                if (tiro.x < buffer->w)
                {
                    tiro.x += tiro.vel;
                }
                else
                {
                    tiro.ativo = NAO_ATIVO;
                }
            }
        }
    }

    O que ela faz? Ela percorre pelo array de tiros e nos que estiverem ativos, ela exibe na tela, e verifica se ela ainda se encontra na parte visível da tela, caso sim, atualiza sua posição incrementando sua coordenada X pela sua velocidade, caso ela não esteja mais visível, ela já sumiu, então ele defini-a como não ativa. É claro que, quando você tiver inimigos, você vai ter que testar a colisão delas com esses inimigos também.

    Vamos também criar uma função que cria um tiro, ou seja, que atira quando você pressiona a tecla de tiro.

    void atirar()
    {
        int i;
        for (i = 0; i < MAX_TIROS; i++)
        {
            if (tiro.ativo == NAO_ATIVO)
            {
                tiro.ativo = ATIVO;
                
                // Setamos a coordenada que ele vai sair
                tiro.x = nave.x + 75;
                tiro.y = nave.y + 25;
                
                break;
            }
        }
    }

    Essa é bem simples. Ela percorre o array até o primeiro tiro que não estiver ativo. Então ela o ativa e seta sua coordenada inicial como a coordenada da nave (aqueles números adicionais são para achar a coordenada do ponto que é a saída do tiro na nave).

    Pronto. A estrutura é essa. Muito simples, não? Basta você agora colocar na incialização do jogo a função iniciar_tiros(), que vai inicializar todos os tiros, colocar no loop principal a função show_tiros(), que vai atualizar os tiros, e verificar quando o usuário pressiona uma tecla de tiro e coloca a função atirar().
    • 32 posts
    23 de março de 2015 16:46:39 ART
    Aham
    • 2 posts
    25 de dezembro de 2016 15:53:44 ART

    Hi, I do think this is a great blog. I will revisit once again since i http://write-my-essays.org/grademiners-com-review/  have saved as a favorite it. 

    • 520 posts
    9 de janeiro de 2019 04:35:14 ART

    Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include. Idee Aperitivo

    • 520 posts
    9 de janeiro de 2019 15:19:27 ART

    Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include. valentines day wishes

    • 520 posts
    11 de janeiro de 2019 10:52:26 ART

    Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include. news

    • 520 posts
    12 de janeiro de 2019 05:45:56 ART

    I’ve read some good stuff here. Definitely worth bookmarking for revisiting. I surprise how much effort you put to create such a great informative website. 토토사이트

    • 520 posts
    12 de janeiro de 2019 14:04:40 ART

    Thanks for the blog filled with so many information. Stopping by your blog helped me to get what I was looking for. Now my task has become as easy as ABC. etisalat speed test

    • 520 posts
    15 de janeiro de 2019 04:18:27 ART

    This is my first visit to your web journal! We are a group of volunteers and new activities in the same specialty. Website gave us helpful data to work. Desert Safari Packages

    • 520 posts
    16 de janeiro de 2019 05:04:52 ART

    I wanted to thank you for this great read!! I definitely enjoying every little bit of it I have you bookmarked to check out new stuff you post. https://www.centrales-vapeur.fr

  • 16 de janeiro de 2019 08:43:35 ART

    I really loved reading your blog. It was very well authored and easy to understand. Unlike other blogs I have read which are really not that good.Thanks alot!Face mask sheet

  • 17 de janeiro de 2019 02:48:37 ART

    I wanted to thank you for this excellent read!! I definitely loved every little bit of it. I have you bookmarked your site to check out the new stuff you post.Blog

    • 520 posts
    17 de janeiro de 2019 03:08:32 ART

    This is my first visit to your web journal! We are a group of volunteers and new activities in the same specialty. Website gave us helpful data to work. overcome jealousy

    • 520 posts
    18 de janeiro de 2019 07:02:46 ART

    I really impressed after read this because of some quality work and informative thoughts . I just wanna say thanks for the writer and wish you all the best for coming!. chase routing number washington

    • 520 posts
    19 de janeiro de 2019 04:49:13 ART

    I have read your blog it is very helpful for me. I want to say thanks to you. I have bookmark your site for future updates. charts

  • 23 de janeiro de 2019 03:48:50 ART

    Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include. smartphone pliable

    • 520 posts
    23 de janeiro de 2019 14:01:12 ART

    An interesting dialogue is price comment. I feel that it is best to write more on this matter, it may not be a taboo topic however usually individuals are not enough to talk on such topics. To the next. Cheers.jiofi login password

    • 520 posts
    24 de janeiro de 2019 13:36:11 ART

    Hey what a brilliant post I have come across and believe me I have been searching out for this similar kind of post for past a week and hardly came across this. Thank you very much and will look for more postings from you. mans kurta in Pakistan

    • 520 posts
    25 de janeiro de 2019 07:17:22 ART

    Great job for publishing such a beneficial web site. Your web log isn’t only useful but it is additionally really creative too. keo nha cai

  • 28 de janeiro de 2019 07:02:50 ART

    Nice post! This is a very nice blog that I will definitively come back to more times this year! Thanks for informative post.latest news

    • 520 posts
    28 de janeiro de 2019 11:49:23 ART

    Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include. Marketing

  • 29 de janeiro de 2019 04:30:13 ART

    This is my first visit to your web journal! We are a group of volunteers and new activities in the same specialty. Website gave us helpful data to work.news

    • 455 posts
    29 de janeiro de 2019 08:03:46 ART

    Hey, this day is too much good for me, since this time I am reading this enormous informative article here at my home. Thanks a lot for massive hard work. all the information

    • 520 posts
    31 de janeiro de 2019 06:37:36 ART

    This is actually the kind of information I have been trying to find. Thank you for writing this information. riding mowers

    • 455 posts
    1 de fevereiro de 2019 08:17:20 ART

    Please share more like that. business major resume templates