JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Input & Sprite
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 14.03.2004, 18:59    Titel: Input & Sprite Antworten mit Zitat

Ehh Ja ich mal wieder.... Embarassed


Habe eine Frage habe, die Kapitel mit Input Manager und Audio Fertig, wollte eine Einfache bewegung machen, aber wie mache ich das das die Sprite Klasse und die Input Klasse mit einander Arbeite..


Beispiel:

//So wollte ich das Machen (Like Buch)

int Bewegung = Input.GetInput()

...

Sprite.Move(Bewegung)

...


Ehmm was muss ich machen damit die Klasse zusammen arbeiten..


Danke fuer Hilfe..
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 14.03.2004, 19:04    Titel: Antworten mit Zitat

Wo genau liegt denn dein Problem? Was funktioniert an deinem Ansatz nicht?

du bekommst mit getInput() die Richtung zurück. Nun übergibst du die Richtung an dein Sprite mit sprite.move(bewegung). fertig.

Willst du wissen, wie die move()-Methode aussehen muss? Hier musst du je nach Bewegungsrichtung die Koordinaten des Sprites verändern.

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 14.03.2004, 19:06    Titel: Antworten mit Zitat

Hmm, wieso klappt das den nicht, muss ich den was Individuell verändern ind er Move Methode von der Sprite Klasse.. wenn nicht weiss ich echt nicht weiter.. aber ich verde das mal versuchen!
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 14.03.2004, 19:07    Titel: Antworten mit Zitat

na entweder du erstellst die ganz normal eine instanz der input klasse
...oder...
du machst die input klasse static, was gar keine schlechte idee ist, da es ja eh nur eine instanz geben muß/kann...dann kannst du so wie du es oben geschrieben hast von überall drauf zugreifen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 14.03.2004, 19:15    Titel: Antworten mit Zitat

WAS genau klappt denn nicht? Gibt es Fehlermeldungen? Passiert etwas ungewolltest mit deinem Sprite? Wenn ja, WAS???
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 14.03.2004, 22:22    Titel: Antworten mit Zitat

So ich habe mal geschaut was fuer ein Fehler kommt

Fehler:

\CDirect3D\Sprite MOVE\Main.cpp(87) : error C2664: 'Move' : Konvertierung des Parameters 1 von 'int' in 'enum DIRECTION' nicht moeglich

Der Fehler sagt mir einiges Doch wenn ich

void Draw(int Direction)

mache geht das nicht und das programm wird sofort beendet...

Also was muss ich machen, so dass das geht

int Bewegung = Input.GetInput();

Figur.Move(Bewegung);

Nur kurze erklärung und beschreibung danke!


Embarassed

Ich weiss aller Anfang ist schwer, besonder fuer mich Crying or Very sad
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 15.03.2004, 02:37    Titel: Antworten mit Zitat

o mann, poste mal die move funktion und deren aufruf...
oder versuch es besser zu erklären, ich werd daraus nicht schlau..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 15.03.2004, 08:50    Titel: Antworten mit Zitat

Ich vermute mal, dir fehlt sowas in der Art:

Code:
enum DIRECTION {HOCH=1, RUNTER=2, LINKS=3, RECHTS=4 };


bin mir aber bei der Syntax nicht mehr sicher...

ABER GIBT UNS BITTE CODE!!!!!!
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 15.03.2004, 18:41    Titel: Antworten mit Zitat

Hier der Code!

Code:

// Definition der Bewegungsrichtungen
enum DIRECTION { LEFT, RIGHT, UP, DOWN };


So das muss ich dem hier anpassen!

Code:

int CInputManager::getKeyboardInput(void)
{
       // alle Tasten der Tastatur
        char     buffer[256];
   
        if(FAILED(m_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer)))
        {
            // die Tastatur wurde zwischenzeitlich
            // durch eine andere Anwendung genutzt
            // Kontrolle wiederholen
            m_lpDIDevice->Acquire();
            return 0;
        }
   
        // bestimmen welche Taste gedrückt wurde
        // und Tastenkombination zurückgeben
        int Keys = 0;

        if(buffer[DIK_LEFT])
        {
            Keys += MOVE_LEFT;       
        }
        else if(buffer[DIK_RIGHT])
        {
            Keys += MOVE_RIGHT;
        }
        if(buffer[DIK_UP])
        {
            Keys += MOVE_UP;
        }
        else if(buffer[DIK_DOWN])
        {
            Keys += MOVE_DOWN;           
        }
        if(buffer[DIK_LCONTROL] || buffer[DIK_RCONTROL])
        {
            Keys += MOVE_FIRE;
        }

        return Keys;
}


Hier die MOVE:

Code:

void CSprite::Move(DIRECTION dir)
{
    // Bei der Bewegung werden die Bildschirmbegrenzungen beachtet
    switch(dir)
    {
        case LEFT:
                if(m_vPosition.x - m_Width / 2.0f> 0)
                {
                    m_vPosition.x -= m_StepX;
                }
        break;

        case RIGHT:
                if(m_vPosition.x < SCR_WIDTH - m_Width / 2.0f)
                {
                    m_vPosition.x += m_StepX;
                }
        break;

        case UP:
                if(m_vPosition.y - m_Height / 2.0f> 0)
                {
                    m_vPosition.y -= m_StepY;
                }
        break;

        case DOWN:
                if(m_vPosition.y < SCR_HEIGHT - m_Height / 2.0f)
                {
                    m_vPosition.y += m_StepY;
                }
        break;
    }
}


So das war alles, jetzt muessen die beiden Klasse nur noch miteinander Abgestimmt werden.... Rolling Eyes
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 15.03.2004, 19:32    Titel: Antworten mit Zitat

Rolling Eyes

Öhm, bist du sicher das du es nicht lieber nochmal selber versuchen möchtest ? So schwer sieht das nicht aus. Nehm dir mal ein zwei Tage Auszeit und dann schaust du noch mal auf diesen Code. Dann wirst du den Blick frei für neue Dinge haben und es hoffentlich alleine packen.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 15.03.2004, 20:15    Titel: Antworten mit Zitat

ich denke auch, dass du das selber schaffen solltest...ich bring dich noch auf den richtigen weg:
als erstes ändere mal getInput()...problem hier ist, dass du bestimmte specifier anders definiert hast..also einfach austauschen.
zur move funktion...da schaust du was für nen datentyp getInput() zurückliefert und demnach mußt du den parameter definieren...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 16.03.2004, 03:41    Titel: Antworten mit Zitat

Hmm... ich denke ich habe die Lösung!!


Hoffe ich jedenfalls...

Also mein Lösungsvorschlag(LIKE Buch):

//In der Klasse
void Move(int Dir)

//In der CPP

void CSprite::Move(int Dir)
{
if(Dir & MOVE_LEFT)
{
m_vPosition.x -= m_StepX;
}

...


könnte das ungefähr so gehen! Smile
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 16.03.2004, 08:39    Titel: Antworten mit Zitat

Sollte das nicht so sein:

Code:
void CSprite::Move(int Dir)
{
  if(Dir == MOVE_LEFT)
  {
    m_vPosition.x -= m_StepX;
  }
  ...
}


Kannst du sagen was MOVE_LEFT ist ?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 16.03.2004, 09:19    Titel: Antworten mit Zitat

nene, das ist schon ok so. Der Methode Move wird das Ergebnis von getInput() übergeben. In getInput werden die einzelnen Aktionen addiert. Binär vorgestellt kann man sich das so vorstellen:

0000 (die erste Null steht für "Oben", die zweite für "links" etc...) DAnn muss man natürlich auch die Konstanten MOVE_LEFT etc... dementsprechend deklariert haben, dass nur Zweierpotenzen verwendet werden. Wenn sich das Objekt nun nach oben und links bewegen soll, wird so etwas übergeben:

1100

Wenn du nun diese Zahl binär mit der Konstanten UND-verknüpfst, erhältst du:

1100
0100
------
0100 > 0 --> Sprite nach links bewegen

anschließend dasselbe mit Oben und den anderen Richtungen:

1100
0010
-----
0000 = 0 --> keine Bewegung nach rechts (wenn rechts so definiert ist)

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 16.03.2004, 09:51    Titel: Antworten mit Zitat

Ich habe das jetzt so gemacht:

Code:

// Bewegung des Sprite in Abhängigkeit der Direction
void CSprite::Move(int Direction)
{
    int Framerate = m_ResManager->GetFramerate();

    // Bewegung nach links oder rechts
   if(Direction & MOVE_LEFT)
    {
      if(m_vPosition.x - m_Width / 2.0f> 0)
      {
         m_vPosition.x -= m_StepX;
      }
   }
    else if(Direction & MOVE_RIGHT)
    {   
      if(m_vPosition.x < SCR_WIDTH - m_Width / 2.0f)
      {
            m_vPosition.x += m_StepX;
      }       
    }

   // Bewegung nach oben oder unten
    if(Direction & MOVE_UP)
    {
      if(m_vPosition.y - m_Height / 2.0f> 0)
      {
            m_vPosition.y -= m_StepY;
      }
    } 
    else if(Direction & MOVE_DOWN)
    {
      if(m_vPosition.y < SCR_HEIGHT - m_Height / 2.0f)
      {   
           m_vPosition.y += m_StepY;
      }       
    }

}

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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