Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sizzla

Frischling

  • »Sizzla« ist der Autor dieses Themas

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

1

28.10.2009, 00:53

[allegro] Maus-Collision! aber wie?

Ich versuche jetz schon mehrere Stunden und finde irgendwie keine Lösung die funktioniert...

Es findet einfach keine Kollision statt.. wo liegt mein Fehler?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <allegro.h>
#include <winalleg.h>

int BildKollision(BITMAP* Ente,int x1, int y1, BITMAP* Player, int x2, int y2)
{
    if(x1>=(x2+Player->w) || y1>=(y2+Player->h) || x2>=(x1+Ente->w) || y2>=(y1+Ente->h)) return 0;
    else                                                                                 return -1;
}

int main()
{
    allegro_init();                                             //initialisiere Allegro (muss gemacht werden!!!)

    install_keyboard();                                         //Initialisiere Tastatur

    install_mouse();                                            //Initialisiere Maus

    set_color_depth(32);                                        //Farbtiefe 16Bit

    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);     //Fenstermodus mit 800x600 Pixel.

    set_window_title("Shoot it! v0.1");                         //Fenster-Titel angeben.


    //Alle Bilder initialisieren

    BITMAP *Ente; 
    BITMAP *Hintergrundbild;
    BITMAP *Player;
    BITMAP *buffer;
    
    int x1 = 100;
    int y1 = 400;
    int x2 = mouse_x;
    int y2 = mouse_y;
    
    //Alle Bilder laden

    Ente = load_bitmap("images//Duck2.bmp", NULL);
    Hintergrundbild = load_bitmap("images//Background.bmp", NULL);
    Player = load_bitmap("images//maus.bmp", NULL);    
    
    buffer = create_bitmap(SCREEN_W, SCREEN_H);//erzeugt den Zwischenspeicher

    
    //Hauptschleife

    while( !keypressed())
    {       
                //löscht den Zwischenspeicher

                clear(buffer);

                //malt die Bilder in den Zwischenspeicher

                draw_sprite(buffer, Hintergrundbild, 0, 0);                  //Hintergrund

                draw_sprite(buffer, Ente, 100,400);                          //Ente

                draw_sprite(buffer, Player, mouse_x-25, mouse_y-25);         //Maus

                
                //malt die  neuen Bilder auf den Bildschirm

                blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
                
                if(BildKollision(Ente,x1,y1,Player,x2,y2)) textprintf_ex(screen,font,350,280,makecol(255,0,0),-1,"Kollision!");
                
                
    }
    //Bilder wieder löschen

    destroy_bitmap(Ente);
    destroy_bitmap(Hintergrundbild);
    destroy_bitmap(Player);
      
    return 0;
}
END_OF_MAIN()


PS: Soll sowas wie Moohrhuhn werden und ich möchte gerne eine meldung bekommen sobald ich mit der Maus über einer Ente stehe.
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

28.10.2009, 08:45

hier setzt du die variablen auf die position der maus und das wars. du änderst sie nie wieder. wolltest du eine/n referenz/zeiger benutzen?

C-/C++-Quelltext

1
2
int x2 = mouse_x;
    int y2 = mouse_y; 


bewegt sich auf deinem screen überhaupt was? (kenn mich mit allegro nicht aus^^)

versuchs mal mit

C-/C++-Quelltext

1
                if(BildKollision(Ente,x1,y1,Player,mouse_x,mouse_y)) textprintf_ex(screen,font,350,280,makecol(255,0,0),-1,"Kollision!"); 

Sizzla

Frischling

  • »Sizzla« ist der Autor dieses Themas

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

3

28.10.2009, 19:11

Ok hat gefunzt danke :)
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

Werbeanzeige