[Problem gelöst] pielerberechnung bei Jump'n Run Spiel?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: [Problem gelöst] pielerberechnung bei Jump'n Run Spiel?

BeitragSo, Nov 19, 2006 1:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Abend zusammen,
Ich habe folgendes problem, ich benutze für die Map Tile grösse 50*50 pixel und mein Spieler ist 100*100 Pixel.
Wenn ich es jetzt berechnen möchte zum Jumpen, dann fliegt die figur durch die Tiles.
Hier mal meine berechnungen zum Jumpen:

Code: [AUSKLAPPEN]
Function SpielerJump()

  If KeyDown(200) Then
    If jump = False Then
      jump = True
      spieler_temp_y = 7
    EndIf
  EndIf

  If Spielfeld((spieler_x+scroll_x+50)/100,spieler_y/100) > 0 And jump = True Then
    jump = False
    spieler_y = spieler_y + 1
  EndIf

  If jump = True Then
    SpielerSekunde=0
    spieler_temp_y = spieler_temp_y -0.15
    spieler_y = spieler_y - spieler_temp_y
    If spieler_temp_y =< 0 Then
      If Spielfeld((spieler_x+scroll_x+50)/100,(spieler_y+50)/100) > 0 Then
        jump = 0
        temp = spieler_y / 100
        spieler_y = temp * 100
      EndIf
    EndIf
  EndIf

  If jump = False Then
    If Spielfeld((spieler_x+scroll_x+50)/100,(spieler_y+100)/100) = 0 Then
      jump = True
      spieler_temp_y = 0
    EndIf
  EndIf

End Function


wisst ihr vieleicht wie ich eine genaue berechnung hinbekomme?
Ich wäre euch sehr dankbar für die hilfe.

Edit: könnt ihr mir vll nur diese berechnung hier erklären?

Code: [AUSKLAPPEN]
map((spieler_x+32) /32,(spieler_y+16) /32)


also irgendwie verstehe ich das noch net so richtig.
Ich glaube +32 also die breite des spielers /32 weil die Tiles 32*32 Pixel gross sind und für y +16 um die Mitte des Spielers zu bestimmen / 32 weil die Tiles 32*32 Pixel gross sind.
Ist das so richtig?
Oder ist das bei spieler_y+16 für die Tiles um die Mitte zu bestimmen, oder für den Spieler?

Vielen Dank schonmal.

MFG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
  • Zuletzt bearbeitet von bruce85 am Mo, Nov 20, 2006 16:43, insgesamt einmal bearbeitet

Hubsi

BeitragSo, Nov 19, 2006 11:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist am einfachsten zu verstehen wenn man das ganze mal trocken rechnet. Nehmen wir an Du hast folgnede Werte in dem Array:

Code: [AUSKLAPPEN]
123
405
678


Auf der 0 steht dann der Spieler (also bei x=32 und y=32), die Tiles sowie der Spieler sind 32*32 Pixel groß. Und jetzt rechnen wir den Zahlenhaufen um:

Code: [AUSKLAPPEN]

tilenummer_rechts = map((spieler_x+32) /32,(spieler_y+16) /32)
tilenummer_rechts = map(( 32 +32) /32,( 32 +16) /32)
tilenummer_rechts = map( 64 /32, 48 /32)
tilenummer_rechts = map( 2 , 1 ) ; 1 deshalb, weil Blitz aus dem 1.5 einen Integer macht
tilenummer_rechts = 5


Wenn jetzt das Tile Nr. 5 ein Felsbrocken ist kann der Spieler nach rechts nicht weiterlaufen oder ist Bergsteiger Very Happy Wenn das mal sitzt kannst Du für die restlichen Richtungen die Berechnung leicht umstellen und auf Deine Tile- und Spielergröße anpassen.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

bruce85

BeitragSo, Nov 19, 2006 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke dir,
aber wie tu ich das jetzt anwenden?
Ich muss das jetzt irgendwie in einer Funktion packen, aber wie?
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Hubsi

BeitragSo, Nov 19, 2006 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Müssen nicht, Du kannst wenn Du besser damit klarkommst. Empfehlenswert wäre es aber sich von vornherein Gedanken zu machen wie man die Tiles aufteilen möchte (also wegen meiner ist der Bereich von 1 bis 250 begehbar, 251 bis 500 nicht, usw.) oder ob man vielleicht mit Layern arbeiten will (Erster Layer ist Boden, zweiter Layer Kollision, dritter Layer Dinge zum aufsammeln oder besondere Aktionen). Wie Du das schlussendlich anwendest liegt also bei Dir Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

bruce85

BeitragSo, Nov 19, 2006 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke dir, also die berechnung ist eigentlich kein problem für mich wenn ich ein Player mache der gleich gross wie die Tiles sind, ich versteh nur nicht wie ich den Player richtig berechne, weil der Player größer ist als die Tiles.
Die Tiles sind 50*50 Pixel gross und der Player 100*100 Pixel.
Jetzt weiss ich nicht genau wie ich das hier umrechne das der Player perfect also genaue Pixel kollidiert:

Code: [AUSKLAPPEN]
If KeyDown(205) Then
  If Spielfeld((spieler_x+50)/50,(spieler_y+25)/50) = 0 Then
    spieler_x = spieler_x + 2
  EndIf
EndIf


kannst du mir das vieleicht mal erklären wie ich das jetzt mache?
Danke dir schonmal.

Gruss Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

BladeRunner

Moderator

BeitragSo, Nov 19, 2006 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Dazu kann ich nur anmerken dass Du vielleicht dein Tilesystem überdenken solltest.
Wenn Dein Player per Se 4 Tiles bedeckt, warum hältst Du an dieser Tilegröße fest ?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Hubsi

BeitragSo, Nov 19, 2006 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
If Spielfeld((spieler_x+100)/50,(spieler_y+25)/50) And Spielfeld((spieler_x+100)/50,(spieler_y+75)/50)

Du solltest das ganze erstmal wirklich verstanden haben, sonst kommt der Frust von ganz alleine Very Happy Wie schon gesagt ist es wirklich nicht vorteilhaft verschiedene Größen für Tiles und Spieler zu verwenden, aber impossible is nothing Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

bruce85

BeitragSo, Nov 19, 2006 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht irgendwie nicht, egal ich werds mal selbst versuchen.
Danke dir trotzdem.

Gruss Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

bruce85

BeitragSo, Nov 19, 2006 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo nochmal,
also ich versuche schon seit stunden eine Richtige killision mit den Tiles hinzubekommen.
Kann mir vll einer nur diesen Code hier erklären?

Code: [AUSKLAPPEN]
If Spielfeld((spieler_x+100)/50,(spieler_y+25)/50) = 0 And Spielfeld((spieler_x+100)/50,(spieler_y+75)/50) = 0 Then


also wenn spieler_x 100 pixel nach rechts /50 frei ist dann wird das ja ausgeführt, oder?

wenn ich diesen code umschreibe das der Spieler runterfällt bis es kollidiert, dann ist mein Spieler in der Hälfte der Tile drauf, ich kriegs einfach nicht hin Crying or Very sad

Gibt es vieleicht noch Tutorials zu Jump`n Run Spiel im Netz auser Robsite.de?

Edit: @Hubsi des is so, ich lade die Tiles mit 50*50 Pixel und wenn ich ein Spieler mit 50*50 Pixel nehme, das ist viel zu klein für mein Spieler.
Also nur die Tiles sind 50*50 Pixel und der Spieler 100*100 Pixel.

Edit: @BladeRunner ich weiss das es 4 Tile grösse bedeckt, der Player ist eigentlich bissel kleiner und schmaler, also um 25 pixel sozusagen, nur die Frame grösse für jedes bild ist 100*100 gross.

Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

bruce85

BeitragMo, Nov 20, 2006 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab das Problem selber gelöst, also ich habe die Spielfigur um 50*50 Pixel kleiner gemacht jetzt ist der Spieler 50*50 Pixel gross und jetzt funktioniert die kollision sehr gut.

Und danke für die Antworten Very Happy

MFG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group