|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 19.01.2006, 07:49 Titel: Scrolling Problem |
|
|
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 |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 19.01.2006, 10:13 Titel: |
|
|
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 |
|
|
|
|
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
|