Bitte um Codeerklärung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Pingu_Killer

Betreff: Bitte um Codeerklärung

BeitragSo, Okt 15, 2006 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Ich habe vor n paar monaten mit BlitzBasic angefangen und auch einen sehr schlecht programmierten spaceshooter geschrieben.
Nun verstehe ich folgenden, für mich seehr wichtigen code aber nicht. Er dient der sprungdunktion von einem Jump'n'Run spiel und ich habe ihn aus den jumpn run tutorial von robsite. Ich würde mich sehr freuen, wenn einer von euch sich die Zeit nehmen würde um ihn mir genau zu erklären. Aber beachtet: ich bin nicht gerade ein Blitzmerker, also wäre eine erklärung für idioten klasse:

hier ist der Code: [AUSKLAPPEN]

;falls Player nach oben gegen Mauer springt, fällt er zurück
   If map((Player_pos_x +16) /32,Player_pos_y /32)=1 And jump = True Then
      jump = False
      Player_pos_y = Player_pos_y +1   ;muß um eins tiefer gesetzt werden, da sonst die Figur hängen bleibt
   EndIf
   
   
   ;die eigentliche Sprungroutine
   If jump = True Then
      Player_temp_y = Player_temp_y -0.33    ;Die Temporäre Variable verringern
      Player_pos_y = Player_pos_y - Player_temp_y ; Position Y durch TempY veringern
      ; Solange Temp_y eine positive Zahl ist, bewegt sich unsere Figur hoch,
      ; andernfalls runter.
                                                                          
      If Player_temp_y =< 0 Then   ; Sobald Temp_y den Wert 0 erreicht hat
         If map((Player_pos_x +16) /32,(Player_pos_y +32) /32)=1 Then   
             ;überprüft, ob sich ein Tile unter dem Spieler befindet
            jump = 0
            temp = Player_pos_y /32   ;\
            Player_pos_y = temp *32   ;/ Setzt die genaue Y-Position, falls die Figur mitten im Tile steht
         EndIf
      EndIf
    EndIf
------------------------------------------------------

Gründer und einziges Mitglied von
"NoobTec Games"
 

Dreamora

BeitragSo, Okt 15, 2006 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
player_temp_y ist die beschleunigung.

Diese wird beim absprung positiv gesetzt (er springt ja nach oben also in positive y richtung), wird jedoch durch die gravitation (hier 0.33) nach unten beschleunigt -> player_temp_y = player_temp_y - 0.33

Falls die beschleunigung negativ ist, wird wie im Kommentar beschrieben, überprüft ob eine plattform drunter ist.


für zukünftige Coding Versuche würde ich empfehlen, Variablen nicht unsinnige Namen zu geben. Dann kann sowas nicht passieren. (oder codes nicht zu kopieren wenn sie nicht vollständig verstanden sind)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Pingu_Killer

BeitragMo, Okt 16, 2006 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
ah, vielen dank. Kannst du mir auch sagen was das mit map((player_temp_x bedeutet? es hat irgendetwas mit dem dim feld oder datafald unten und oben vom code zu tun.
------------------------------------------------------

Gründer und einziges Mitglied von
"NoobTec Games"
 

Dreamora

BeitragMo, Okt 16, 2006 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Das scheint eine Tile Map zu sein die sonst wo definiert ist im Code und die die benötigten Daten zur "Kollisionsüberprüfung" enthält.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Pingu_Killer

BeitragMo, Okt 16, 2006 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe mich ma der suchfunktion bedient und eine Sprungfunktion von spidey (oder wie er heist) gefunden, welche mir wesentlich mehr zusagt.
Jedoch ist hier noch ein problem vorhanden: hier kann man eine art "doppelsprung anwenden, der aber nicht nur doppelt, sondern mehrfach und von gigantischem ausmasse ist. Was kann man da machen?

Hier ist der Code: [AUSKLAPPEN]
:
Graphics 800,600,0,2

boden = 500 : playery# = boden
schwerkraft# = 0.1
sprungkraft = 5
speed = 2


SetBuffer BackBuffer()

Repeat
   Cls
   If KeyDown(203) Then
      playerx = playerx - speed
   EndIf
   If KeyDown(205) Then
      playerx = playerx + speed
   EndIf
   If KeyHit(200) Then
      sprung = 1
      playeryspeed# = playeryspeed - sprungkraft
   EndIf
   
   If sprung = 1 Then
      playeryspeed# = playeryspeed + schwerkraft
      playery# = playery + playeryspeed
      If playery > boden Then
         sprung = 0
         playery = boden
         playeryspeed = 0
      EndIf
   EndIf
       
   Oval playerx,playery,10,10,1
   
   Flip
Until KeyHit(1)
------------------------------------------------------

Gründer und einziges Mitglied von
"NoobTec Games"

BladeRunner

Moderator

BeitragMo, Okt 16, 2006 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst eine Abfrage einbauen die die Sprungtaste für die Dauer des Sprunges sperrt.
Das nennt sich dann programmieren - Du solltest versuchen eine eigene Lösung zu finden, sonst wirst Du nichts lernen.

Das 'was' weisst Du nun, das 'wie' ist Dein Job.
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

Pingu_Killer

BeitragMo, Okt 16, 2006 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt grins,
mir ist gerade etwas eingefallen thx deine aufforderung hat mich auf irgendeine Art motiviert lol
thx @ you
thx @ Dreamora
------------------------------------------------------

Gründer und einziges Mitglied von
"NoobTec Games"

Pingu_Killer

BeitragMo, Okt 16, 2006 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
noch eine kleine frage, wegen der ich keinen neuen Thread aufmachen will:
(Wie) Kann ich eine linie die ich gezeichnet habe transparent machen?

Ich möchte diese als "zielvorichtung" für eine KI nehmen. (Wenn der player mit der linie kolidiert, soll der gegner schiesen)
------------------------------------------------------

Gründer und einziges Mitglied von
"NoobTec Games"

BladeRunner

Moderator

BeitragMo, Okt 16, 2006 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Unter 2D wird das schwierig. Du könntest jeden einzelnen Pixel einzeln anhand der darunterliegenden Farbwerte berechnen, was aber aufwendig und langsam ist. Die Suche sollte hier helfen.
Allerdings benötigst Du das eigentlich nicht, wenn ich Dich richtig verstehe. Denn ob Du mit der Linie kollidierst ist eine rein mathematische Prüfung, dafür muss die Linie selbst ja nicht gezeichnet sein. (Die passenden Gleichungen sollten sich finden lassen, dürfte Mathe der Klassenstufe 6 oder 7 sein.)
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group