Register for your free account! | Forgot your password?

You last visited: Today at 01:59

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Delphi Hilfe

Discussion on Delphi Hilfe within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1


 
Ky0n''s Avatar
 
elite*gold: 12312
The Black Market: 280/0/0
Join Date: Dec 2010
Posts: 10,834
Received Thanks: 639
Delphi Hilfe

Hallo,
ich mache es kurz:
Zurzeit programmaiere ich mit einem Freund an einen kleinerem 2D-Spiel, um vor allem die Grundlagen des Programmierens zu erlernen. Jetzt haben wir den Wunsch, praktische eine "Karte" von, sagen wir mal 3000x3000 pixel zu machen ( hypothetischer Wert). Jetzt wollen wir aber, das immer wenn sich unser Spieler Bewegt, sich die Kamera anpasst, und so der Spieler immer in der Mitte ist. Ich blicke da nicht durch, Normalerweiße sollte doch sowas irgendwie mit ClipRect oder sowas gehen??

-> Ja delphi ist kacke, hat aber was mit der Schule zu tun. Bin über jede, vor allem schnelle Hilfe, sehr dankbar
Ky0n' is offline  
Old 12/01/2013, 20:45   #2
 
Saedelaere*'s Avatar
 
elite*gold: 1
Join Date: Mar 2011
Posts: 828
Received Thanks: 1,395
Quote:
Originally Posted by Drag0n' View Post
Ja delphi ist kacke, hat aber was mit der Schule zu tun. Bin über jede, vor allem schnelle Hilfe, sehr dankbar
Den Satz will ich mal überlesen haben

Ist die karte statisch in einem Bitmap gespeichert? Ich würde so verfahren, dass ich pro "Frame" / OnPaint Ereignis erstmal den Hintergrund komplett schwarz fülle und dann je nach Position des Spieler mit Canvas.Draw() die Karte auf an die entsprechenden Koordinaten zeichnen lasse.
Saedelaere* is offline  
Old 12/01/2013, 20:50   #3


 
Ky0n''s Avatar
 
elite*gold: 12312
The Black Market: 280/0/0
Join Date: Dec 2010
Posts: 10,834
Received Thanks: 639
Ich will jetzt nicht, naja faul klingen, aber kannst du mir das bitte als Code schreiben? Ich habs schon so lange versucht... Zudem wäre es besser wann man,naja das Form verschiebt, da auch noch Objekte mit eigenen Koordinaten existieren.

Hintergrundbild ist TImage
Ky0n' is offline  
Old 12/01/2013, 21:03   #4
 
elite*gold: 159
Join Date: Jun 2013
Posts: 1,776
Received Thanks: 2,004
Kenne mich mit Delphi nicht aus aber in der Theorie würde ich einfach beim "bewegen des Charakters" einfach die Karte verschieben
Brendan Jordan is offline  
Old 12/01/2013, 21:07   #5


 
Ky0n''s Avatar
 
elite*gold: 12312
The Black Market: 280/0/0
Join Date: Dec 2010
Posts: 10,834
Received Thanks: 639
... und wie geht das???
-.-
Ky0n' is offline  
Old 12/01/2013, 21:20   #6
 
Saedelaere*'s Avatar
 
elite*gold: 1
Join Date: Mar 2011
Posts: 828
Received Thanks: 1,395
Quote:
Originally Posted by Drag0n' View Post
... und wie geht das???
Man verändert einfach entsprechend die X und Y Koordinaten der Karte beim Zeichnen. Die Mathematik dahinter ist recht trivial.

Code:
function TForm3.GetTransformedPosition: TPoint;
var
  SX, SY: Extended;
begin
  SX := FMap.Width / FMapPos.X;
  SY := FMap.Width / FMapPos.Y;
  Result.X := Round(Width / 2 - FMap.Width / SX);
  Result.Y := Round(Height / 2 - FMap.Height / SY);
end;
FMap ist ein Bitmap, welches die Karte enthält und FMapPos ist ein TPoint mit der Position des Spielers relativ zur Karte.
Attached Files
File Type: rar gametest.rar (2.03 MB, 1 views)
Saedelaere* is offline  
Old 12/01/2013, 22:19   #7


 
Ky0n''s Avatar
 
elite*gold: 12312
The Black Market: 280/0/0
Join Date: Dec 2010
Posts: 10,834
Received Thanks: 639
Und was ist mit den ganzen Objekten auf der Karte?
Ky0n' is offline  
Old 12/01/2013, 23:16   #8

 
マルコ's Avatar
 
elite*gold: 1329
Join Date: Jun 2009
Posts: 1,873
Received Thanks: 960
Du speicherst deine Objekte sicherlich in nem Array? dann prüf doch einfach dein Array gegen das aktuell sichtbare Feld.

Code:
type
  TVector2D = record
  begin
    x,y
    : Integer;
  end;

  TGameObject = record
  begin
    // some stuff
    position
    : TVector2D;
  end;

// some methods n ****

var
  // lots of things here
  myObjects
  : array of TGameObject;

  i, // Counter
  displayWidth, // width of visible area
  displayHeight // height of visible area
  : integer;

  upperLeftField // contains coords of  upper left corner field of visible area
  : TVector2D;
begin
  // do whatever
  for i := low(myObjects) to high(myObjects) do
  begin
    if ((myObjects[i].position.x > upperLeftField.x) and
       (myObjects[i].position.x <= upperLeftField.x + displayWidth) and
       (myObjects[i].position.y > upperLeftField.y) and
       (myObjects[i].position.y <= upperLeftField.y + displayWidth)) then
    begin

      // Arguments 2 and 3 do not need to be given,
      // since this can be calculated inside the method
      // but I wrote them down for clarification
      drawObject(myObjects[i], // Object to draw
                      myObjects[i].position.x - upperLeftField.x, // X coord on display rect
                      myObjects[i].position.y - upperLeftField.y); // Y coord on display rect

    end;
  end;
  // do something exciting here
end.
*Das sollte alles natürlich in deine Klasse gekapselt sein, und nicht wie bei mir einfach so dastehen...

**Ungetestet ;P

***Dieser Ansatz ist anfängerfreundlich und LANGSAM. Falls du mal weiter bist empfielt sich hier, einen binary tree o.ä. zu benutzen.
マルコ is offline  
Old 12/01/2013, 23:24   #9
 
MrDami123's Avatar
 
elite*gold: 56
Join Date: Oct 2010
Posts: 3,409
Received Thanks: 1,219
Wie M3BF05B bereits geschrieben hat, reicht es die Karte zu verschieben und den Charakter in der Mitte zu lassen.
Die Frage ist, ob du deine ganze Karte angezeigt hast oder nicht.

Sonst programmierst du einfach, dass wenn du die z.B. Pfeiltasten drückst sich die Karte um z.B. 10px in die jeweilige Richtung verschiebt.
MrDami123 is offline  
Old 12/02/2013, 00:17   #10
 
Saedelaere*'s Avatar
 
elite*gold: 1
Join Date: Mar 2011
Posts: 828
Received Thanks: 1,395
Quote:
Originally Posted by MrDami123 View Post
Wie M3BF05B bereits geschrieben hat, reicht es die Karte zu verschieben und den Charakter in der Mitte zu lassen.
Die Frage ist, ob du deine ganze Karte angezeigt hast oder nicht.

Sonst programmierst du einfach, dass wenn du die z.B. Pfeiltasten drückst sich die Karte um z.B. 10px in die jeweilige Richtung verschiebt.
Ist exakt die Funktionalität, die ich in meinem Beispielsource implementiert habe.

@Threadersteller:
Zeig mal ein bisschen mehr Eigeninitiative :P Die Berechnung von mir, kannst du mit einer simplen Addition ohne weiteres auch auf Objekte der Karte übertragen.

Code:
P := GetTransformedPosition;
  { ... }
  for I := Low(FMapObjects) to High(FMapObjects) do
  begin
    Canvas.Draw(P.X + FMapObjects[I].Pos.X, P.Y + FMapObjects[I].Pos.Y, FMapObjects[I].Image);
  end;
Attached Files
File Type: rar gametest.rar (2.03 MB, 1 views)
Saedelaere* is offline  
Thanks
2 Users
Old 12/02/2013, 01:45   #11

 
マルコ's Avatar
 
elite*gold: 1329
Join Date: Jun 2009
Posts: 1,873
Received Thanks: 960
Quote:
Originally Posted by Saedelaere* View Post
Code:
P := GetTransformedPosition;
  { ... }
  for I := Low(FMapObjects) to High(FMapObjects) do
  begin
    Canvas.Draw(P.X + FMapObjects[I].Pos.X, P.Y + FMapObjects[I].Pos.Y, FMapObjects[I].Image);
  end;
Du musst an dieser Stelle aufpassen. Du zeichnest hier nämlich alle Objekte, was wesentlich langsamer ist, als zu filter (siehe meinen Code), welche Objekte überhaupt sichtbar sind.
Theoretisch müsste man bei der Karte das selbe tun.
Ich würde dort 2 Bitmaps nehmen, das eine enthält die Karte, das andere ist das sichtbare Objekt auf der Form. Und dann immer nur den sichtbaren Bereich vom Kartenbitmap auf das Formbitmap kopieren. Deine Berechnung muss dabei selbstverständlich voraus gehen, um den sichtbaren Bereich zu ermitteln.
マルコ is offline  
Thanks
1 User
Old 12/02/2013, 01:53   #12
 
Saedelaere*'s Avatar
 
elite*gold: 1
Join Date: Mar 2011
Posts: 828
Received Thanks: 1,395
Quote:
Originally Posted by マルコ View Post
Du musst an dieser Stelle aufpassen. Du zeichnest hier nämlich alle Objekte, was wesentlich langsamer ist, als zu filter (siehe meinen Code), welche Objekte überhaupt sichtbar sind.
Das stimmt. In meinem Code sind weder Visible- noch Range Checks implementiert. Hier wollte ich nur demonstrieren, wie der TE die Map Koordinaten der Objekte in die Relative Position im Fenster umrechnen kann.

Je nach Position der Map kann es auch noch zu Divisionen durch 0 kommen, was man vorher noch abfangen sollte.
Saedelaere* is offline  
Thanks
1 User
Old 12/02/2013, 16:19   #13


 
Ky0n''s Avatar
 
elite*gold: 12312
The Black Market: 280/0/0
Join Date: Dec 2010
Posts: 10,834
Received Thanks: 639
Quote:
Originally Posted by Saedelaere* View Post
Das stimmt. In meinem Code sind weder Visible- noch Range Checks implementiert. Hier wollte ich nur demonstrieren, wie der TE die Map Koordinaten der Objekte in die Relative Position im Fenster umrechnen kann.

Je nach Position der Map kann es auch noch zu Divisionen durch 0 kommen, was man vorher noch abfangen sollte.
Kann ich dich auf skype adden?
Wenn ja schick mir bitte ne pn
Ky0n' is offline  
Old 12/02/2013, 23:36   #14
 
Saedelaere*'s Avatar
 
elite*gold: 1
Join Date: Mar 2011
Posts: 828
Received Thanks: 1,395
Sorry, habe nicht allzu viel Zeit für persönliche Hilfestellungen. Wenn du noch Fragen hast, kannst du dich aber gerne hier oder per PM melden.
Saedelaere* is offline  
Old 12/03/2013, 06:41   #15


 
Ky0n''s Avatar
 
elite*gold: 12312
The Black Market: 280/0/0
Join Date: Dec 2010
Posts: 10,834
Received Thanks: 639
ok
Also ich kapiere das nicht ganz, und die Projekte die du geschickt hast gehen auch nicht richtig, weil da immer irgendwelche Fehler sind.
Ky0n' is offline  
Reply


Similar Threads Similar Threads
Delphi OnMouseMove hilfe
09/10/2013 - General Coding - 9 Replies
Hallo, ich möchte eine Anwendung erstellen, in dem sich ein Label bewegt, sobald man die Maus auf der Anwendung bewegt. Das Label soll dann auf eine zufällige Position in der Anwendung springen. Ich weiß, dass es mit OnMouseMove und random(...) funktioniert, aber die genaue zusammensetzung weiß ich nicht :( Würde mich über Hilfe freuen :)
DELPHI - Who make Exploits, Hacks and Tools with DELPHI?
05/15/2013 - CO2 Programming - 13 Replies
Hi all. Iwith DELPHI, but a dont now. hello, I use Delphi to program and i like someone put here source code of make Exploits, Hacks and Tools bot here, or part of the code. ty to all
[DELPHI&METIN]Wie sind die Delphi Befehle für einen Bot?
03/07/2010 - General Coding - 3 Replies
Hallo liebe com, ich habe mal eine Frage: Ich möchte einen Metin Bot in Delphi schreiben aber ich weiß nicht die Befehle für eine bestimmte Taste senden etc. könnt ihr mir die pls sagen oder per pn geben MfGGGGGG
Delphi hilfe
06/12/2009 - Metin2 Hacks, Bots, Cheats, Exploits & Macros - 5 Replies
Hallo leute, ich habe mich gefragt wie man sich z.b. sachen wie mh oder ähnliches selber machen kann...da habe ich mich ma in google und elitepvpers umgeschaut...ich habe nur gefunden das es mit delphi geht...worauf ich mir mal turbodelphi geholt hab kann mir PLS jemand erklären wie das geht?:D oder kann mir vill jemand ein beispiel code geben für irgentwas? schoma ein dickes THX wenn mir jemand helfen kann:D mfg



All times are GMT +1. The time now is 02:00.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.