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

1

12.03.2010, 15:45

Bei der Kollision den "ColorKey" weglassen

Hi,
ich hab mal wieder eine Frage.

Kann man bei der Kollision von zwei objekten den "ColorKey" aussen vor lassen? Also das auch wirklich nur die angezeigte Grafik miteinander Kollidiert?

Falls es schon ein Thread dazu gibt bitte den Link, hab per Suchfunktion nichts gefunden.

gruß
Cmd. Rex

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

2

12.03.2010, 15:47

Wie sieht denn deine Kollision überhaupt aus ?

3

12.03.2010, 15:50

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
for(ItConveyor=m_ConveyorList.begin(); ItConveyor != m_ConveyorList.end(); ItConveyor++)
    {
        cout << "4.2" << endl;
        RectConveyor = ItConveyor->GetRect();
        float fAngle = ItConveyor->GetAngle();

        for(ItBall=m_BallList.begin(); ItBall != m_BallList.end(); ItBall++)
        {
            cout << "4.3" << endl;
            RectBall = ItBall->GetRect();
            bool bisAlive = ItBall->bIsAlive();


            if( RectBall.y < RectConveyor.y + RectConveyor.h/2 - RectBall.h/2 &&
                RectBall.y + RectBall.h > RectConveyor.y &&
                RectBall.x < RectConveyor.x + RectConveyor.w &&
                RectBall.x + RectBall.w > RectConveyor.x)
            {
                cout << "4.4" << endl;
                ItBall->SetAngle(fAngle);
            }

            if(bisAlive == false)
                ItBall = m_BallList.erase(ItBall);
        }

    }

4

12.03.2010, 17:35

Dann musst du wohl oder überl Pixel für Pixel auf kollision überprüfen. Auf die Art, mit dem Code, ignorierst du die Textur bei der Kollision ganz, und nimmst nur ihre Ecken.

5

13.03.2010, 18:43

Okay,
und wie mach ich das?

gruß Cmd Rex

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

6

13.03.2010, 19:05

Womit arbeitest du denn, wenn man fragen darf?
WIP Website: kevinheese.de

7

13.03.2010, 19:31

klar darf man fragen ^^

Sprache:C++,
SDL 1.2.9,
IDE: CodeBlocks,
Betriebssystem: Windows

gruß
Cmd Rex

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

8

13.03.2010, 19:51

Zitat von »"Commander Rex"«

klar darf man fragen ^^

Sprache:C++,
SDL 1.2.9,
IDE: CodeBlocks,
Betriebssystem: Windows

gruß
Cmd Rex


Dann hast du doch sicherlich ein Framework wie Heiko es geschrieben hat, richtig? Lade einfach bei deinem Sprite kein Colerkey und schon wird er weggelassen :)
WIP Website: kevinheese.de

9

13.03.2010, 20:08

Ja, aber dann hab ich ja die rosa stellen angezeigt oder nicht? Ich will ja das er die überspringt. also das er erst am Sichtbaren (nicht rosa) Pixel Kollidiert.

Ich hab so das gefühl ich spreche in Rätseln...

noch mal ein versuch das verständlicher zu erklären:

Ich habe eine Grafik welche leider zwei verschieden große Frames hat (z.B horizontales Rohr, Vertikales Rohr)
Somit ist beim Horizontalem Rohr eine recht große Transparente Fläche bevor das Rohr anfängt( denn beide Rohre sind, und das muss so sein, Mittig im Frame angelegt. welche ja im endeffekt gleich groß sein müssen)
Jetzt Kollidiert z.B das Auto schon immer am ersten Pixel, welcher ja rosa (ColorKey) ist. Also explodiert es quasi ohne Grund (so würde es einer sehen der nicht weiß das da schon die grafik anfäng)

Diesen Effekt möcht ich gerne Unterbinden, sodass das Auto weiterfährt bis es tatsächlich mit dem eigentlichen Rohr kollidiert. Also das es die Kollision mit dem ColorKey einfach ignoriert.

Hoffe das war jetzt verständlicher

gruß
Cmd. Rex

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

10

13.03.2010, 20:24

Achso! Sorry, habs falsch verstanden.

Ja, dann solltest du pixel perfect collision versuchen. Da hab ich n Link für dich:
http://en.wikipedia.org/wiki/SDL_Collide

Dort steht, wie man das mit der SDL umsetzen kann. Hat mir damals auch geholfen.^^
WIP Website: kevinheese.de

Werbeanzeige