JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=26a75af008876395dbf2b8a6c341eb6cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Motion mit Rect

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 29.12.2002, 14:14    Titel: Motion mit Rect Antworten mit Zitat

Hi,
ich verwende die Spriteklasse und die Directdrawklasse aus dem Buch.
Ich hab da jetzt ein Bild mit mehreren Animationen,will aber nur eine haben. Ich wollte jetzt der Sprite::Draw Funktion hinzufügen das man noch ein Rechteck angeben muss, also:

Code:
void Sprite::Draw(LPDIRECTDRAWSURFACE7 lpDDSurface, RECT Motion)


Ich weiß jetzt aber nicht wie ich das Rechteck aus der Oberfläche der Create Funktion "herausschneiden" kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 31.12.2002, 14:13    Titel: Antworten mit Zitat

Wie meinst du das? Das man nur das Rechteck sieht?
Dann gibt man beim Blitten halt nur das Rechteck an!
(Hab die Frage jetzt erst gesehen, sry)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 03.01.2003, 13:42    Titel: Antworten mit Zitat

Ne, ich hab da ein Bild mit mehreren Animationen, ich will da aber nur eine haben, weiß nur nicht wie das gehn soll Question
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 03.01.2003, 13:52    Titel: Antworten mit Zitat

einfach bei BLT Fast das rechteck angeben, das geblittet werden soll
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 03.01.2003, 13:53    Titel: Antworten mit Zitat

Wäre es vielleicht möglich das Bild in lauter kleine Quadrate aufzuteilen und dann zum Beispiel nur die Quadrate 1-4 wiederholen zu lassen?

Doch wenn das funktionieren würde, wie code ich das? Question
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 03.01.2003, 14:01    Titel: Antworten mit Zitat

Also, ich glaube das ist alles im Kapitel "Sprites Animieren" oder so im Buch ausführlich erklärt!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 03.01.2003, 14:55    Titel: Antworten mit Zitat

Ja, es steht schon drin wie man das Bild in Quadrate teilt, und dann "abspielt", aber es wird nicht erklärt wie man z. B. nur 1 - 7 von 20 abspielen lassen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 03.01.2003, 17:26    Titel: Antworten mit Zitat

Also, kuck dir mal die Methode Draw aus dem Beispiel "Sprite Anim" an, da steht unter anderem folgendes drin:
Code:

if(delay >= FrameDelay)
    {
        // nächstes Frame
        CurrentFrameX++;

        // Wenn wir über die Spaltenbegrenzung überschritten haben
        if(CurrentFrameX == FramesX)
        {
            // müssen wir in die nächste Zeile in die 1. Spalte springen
            CurrentFrameX = 0;
            CurrentFrameY++;
                           
           
            // Wenn wir auch die Zeilenbegrenzung überschitten haben
            if(CurrentFrameY == FramesY)
            {
                // müssen wir wieder beim ersten Frame anfangen
                CurrentFrameY = 0;
            }
        }
        // delay auf 0 setzen, damit wieder verzögert werden kann
        delay = 0;
    }


"if(CurrentFrameX == FramesX)" Da kann man dann FramesX als die Anzahl der Animationsschritte pro Zeile nehmen.
" if(CurrentFrameY == FramesY)" Da kann man FramesY als die Anzahl der Zeilen nehmen.
Wenn du halt 4 Animationsschritte pro Zeile und 5 Zeilen haben willst, dann ist:
FramesX = 4;
FramesY = 5;
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DaN00b
JLI'ler



Anmeldedatum: 10.08.2002
Beiträge: 159

Medaillen: Keine

BeitragVerfasst am: 04.01.2003, 01:02    Titel: Antworten mit Zitat

Monkey das ganze ist doch net schwer man muss sich nur selber was überlegen...

z.b. kannst du ganz einfach noch die Create-Funktion der Spriteklasse um zwei parameter erweitern und zwar einen der den anfang der animationsreihe angibt und einer der das ende angibt

danach brauchste in der Draw-Funktion von der Spriteklasse nur noch ein paar if-abfragen mehr und schon hat sich die sache wie das ganze genau geht kannste dir ja selber überlegen ist ja net schwer
_________________
Carpe Diem - Seize the day - Nütze den Tag!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 04.01.2003, 13:05    Titel: Antworten mit Zitat

Ich hab mir da jetzt ne Funktion geschrieben:

Code:
void Sprite::SetMotion(int AnfangX, int AnfangY)
{
       FramesX = AnfangX;
       FramesY = AnfangY;
}


An sich funktioniert das auch so wie ich es will, doch wenn ich es in meinem Hauptprogramm aufrufe, wird sie immer nur beim ersten Aufruf "verwendet", ansonsten wird sie scheinbar ignoriert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DaN00b
JLI'ler



Anmeldedatum: 10.08.2002
Beiträge: 159

Medaillen: Keine

BeitragVerfasst am: 04.01.2003, 13:30    Titel: Antworten mit Zitat

ehm FramesX und FramesY sind wenn du mich fragst doch die anzahl der frames überhaupt und somit eigentlich die absoluten endpunkte der animationsreihe.

was du brauchst sind zwei weitere int in der klasse sprite die sich die start und endpunkt merken
aber du darfst net vergessen das die eigentlichen frames die angezeigt werden durch CurrentFrame festgelegt sind welche ja normalerweiße in der Draw-Funktion inkrementiert werden und so läuft ja die animation ab

die start und endpunkte setzt du in deiner funktion SetMotion der du dann die zwei parameter gibst und CurrentFrame setzt du auf den Startwert den du dir aber zugleich in einem anderen int der klasse auch speicherst

also brauchst du nur noch die draw bearbeiten:

so ist es in der ursrpünglichen
Code:
   
    if(delay++ == 10)
    {
        CurrentFrame++;
        delay = 0;       
    }
   
    if(CurrentFrame == FramesX*FramesY)
    {
        CurrentFrame = 0;
    }   
}

Pseudo:
Code:

    if(delay++ == 10 && CurrentFrame <= EndPunkt)
    {
        CurrentFrame++;
        delay = 0;       
    }
    else
    {
       CurrentFrame = StartPunkt;
    }


Anmerkung: während ich diesen post geschrieben hab empfieng ich gerade das grauen..... Wehrpflichtigenerfassung NEEEEEEEEEEEEEEEIN Wink
_________________
Carpe Diem - Seize the day - Nütze den Tag!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum