JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Scrolling Problem

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 19.01.2006, 07:49    Titel: Scrolling Problem Antworten mit Zitat

hallo,

ich brauch mal Hilfe bei folgendem Problem:

Ich habe mit Hilfe von DirectInput/WinAPI mir ein paar Mouseroutinen
geschrieben und dies an einem Spieler auf einem "festen spielfeld" (ohne scrolling) getestet (also den Spieler
erstma nur rumlaufen lassen) , dies läuft einwandfrei..

Nun habe ich ein Isometrisches Spielfeld welches sich nach dem Spieler
richtet (das Spielfeld verschiebt sich , nicht der Spieler).
Der Spieler befindet sich IMMER auf SCREEN_WIDTH/2, SCREEN_HEIGHT/2.
Die oben genannte Mouseroutine möchte ich jetzt so ändern
das sie auf das Spielfeld wirkt , also alle Tiles...

Wie kann ich das realisieren ?
Mach ich mir es zu schwer , gibt es einfachere Möglichkeiten?

kurzes Quellcode Beispiel:

Das Mousehandling
Code:

inputdevice->Update();

GetCursorPos(&p);
mouseX = p.x;
mouseY = p.y;
               
if(inputdevice->MouseButtonDown(DIMOUSE_LEFTBUTTON)){                         
       target_x = mouseX;
       target_y = mouseY;
                   
       divider_x = inputdevice->GetVectorX(target_x-current_x, target_y-current_y);
       divider_y = inputdevice->GetVectorY(target_x-current_x, target_y-current_y);
                }           
               
                if(current_x < target_x)
                    current_x += divider_x * inputdevice->Accelerate();
                if(current_y < target_y)
                    current_y += divider_y * inputdevice->Accelerate();
               

                if(current_x > target_x)
                    current_x -= divider_x * inputdevice->Accelerate();
                if(current_y > target_y)
                    current_y -= divider_y * inputdevice->Accelerate();


Zeichnen des Spielers und Spielfeld ohne Scrolling:
Code:
for (int y = 0; y < 25; y++) //25
   {
      for (int x = 0; x < 11; x++) //11
      {     
            tile[myMap->get_map(x,y)].set_position(posX, posY);
         tile[myMap->get_map(x,y)].draw();

         posX += 128;
      }
   
      posY += 32;
      if (y % 2) posX = 0; else posX = 64;
   }
   
     

    tree1->set_position(1024/2-(tree->get_width()/2), 768/2-(tree1->get_height()/2));
   tree1->draw();


mfg
DarK
_________________
"Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."

"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."

"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 19.01.2006, 10:13    Titel: Antworten mit Zitat

Hi,

ich gebe allen Tiles erstmal eine feste Position. Dann erstelle ich mir für eine Virtuelle Kamera die Variablen:
CPP:
float ViewX = 0.0f;
float ViewY = 0.0f;


Wenn du dann deine Tiles zeichnen willst musst du deren Position auf dem Bildschirm so berechnen:
CPP:
int ScreenPosX = TilePosX - ViewX;
int ScreenPosY = TilePosY - ViewY;


Genauso kannst du die so berechnete Position mit der Position der Maus vergleichen da sich beide auf den Bildschirm beziehen.

Bewgeung realisierst du mit:
CPP:
if(Left)ViewX-= Bewegunsfaktor;
if(Right)ViewX+= Bewegunsfaktor;
if(Up)ViewY-= Bewegunsfaktor;
if(Down)ViewY+= Bewegunsfaktor;


Natürlich ist das noch nicht ideal und stark optimierungsbedürftig aber so bekommst du es immerhin schonmal hin.

Wenn das mal läuft solltest du folgendes umbedingt noch einbauen:
- Tiles in Sektoren aufteilen um nicht jedesmal alle Tiles prüfen zu müssen
- Bewegung abhängig von der Framerate berechnen
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 -> DirectX, OpenGL 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