Player hüpft nicht

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Der Eisvogel

Betreff: Player hüpft nicht

BeitragSo, Dez 16, 2007 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
mein Problem ist, dass der Player nur springt wenn er auf dem Boden steht.
Wenn er aber auf einem Tile steht, springt er nicht mehr. Sad
Wieso?
Code: [AUSKLAPPEN]
Graphics 640,480,32,2

Global Player=LoadImage ("player.png")
MaskImage Player, 255, 0, 255
Global tile = LoadImage ("tile.png")
MaskImage tile, 255, 0, 255

Dim map1(20,15)
Restore mapdata
For y=0 To 14
For x=0 To 19
Read map1(x,y)
Next
Next

Global level1=1
Global Player_pos_x = 0
Global Player_pos_y = 0
Global Player_temp_y# = 0
Global jump
Global jumptimer#

Repeat
Cls

For y = 0 To 14
For x = 0 To 19
If map1(x,y) = 1 Then
DrawImage tile, x*32, y*32
EndIf
Next
Next


DrawImage Player, player_pos_x,player_pos_y

moveplayer()
playerjump()

Flip
Until KeyHit(1)
End

Function moveplayer()
If KeyDown(203) Then   
If map1(Player_pos_x /32,(Player_pos_y +16) /32)=0 Then
Player_pos_x = Player_pos_x -4
If Player_pos_x =< 0 Then Player_pos_x = 1
EndIf
ElseIf KeyDown(205) Then
If map1((Player_pos_x +32) /32,(Player_pos_y +16) /32)=0 Then
Player_pos_x = Player_pos_x +4
If Player_pos_x => 608 Then Player_pos_x = 607
EndIf
EndIf
End Function



Function playerjump()
If KeyDown (57) Then
If jump = False
jump = True
Player_temp_y = 30
EndIf
EndIf
   
If map1((Player_pos_x +24) /32,(Player_pos_y+15) /32)=1 And jump = True Then
jump = False
Player_pos_y = Player_pos_y +1
EndIf
   
   
If jump = True Then
Player_temp_y = Player_temp_y -0.33
Player_pos_y = Player_pos_y - Player_temp_y
                                                                          
If Player_temp_y =< 0 Then
If map1((Player_pos_x+4) /32,(Player_pos_y +96) /32)=1 Then   
jump = 0
temp = Player_pos_y /32
Player_pos_y = temp *32
EndIf

If map1((Player_pos_x +26) /32,(Player_pos_y +96) /32)=1 Then   
jump = 0
temp = Player_pos_y /32
Player_pos_y = temp *32
EndIf

If map1((Player_pos_x +47) /32,(Player_pos_y +96) /32)=1 Then   
jump = 0
temp = Player_pos_y /32
Player_pos_y = temp *32
EndIf
EndIf
EndIf
   
If jump = False  Then
If map1((Player_pos_x +24) /32,(Player_pos_y +32) /32)=0 Then
jump = True
Player_temp_y = 0
EndIf
EndIf
   
If Player_pos_y =< -15 Then
Player_pos_y = -14
jump = True
Player_Temp_y = 0
EndIf

If Player_pos_y => 386 Then
Player_pos_y = 385
jump = False
EndIf
End Function

.mapdata
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Ich muss das unbedingt wissen.
 

Lador

BeitragDi, Dez 18, 2007 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich kann dir jetzt nicht genau sagen, wo der Fehler ist. Aber: Ist dir schon mal aufgefallen, dass "player_temp_y" immer zwischen 0 und -0.33 hin und her schwankt, wenn der spieler ganz unten auf dem Boden ist? Außerdem solltest du vielleicht nur die Sprung-Funktion schicken, dann würde dir vielleicht auch jemand anderes antworten, wenn nicht so viel Code hier ist.

Nur als Anregung:
"player_temp_y" wird ja immer -0.33, wenn jump=True ist. Das kann es aber nicht sein, denn wenn jump=True ist, ist player_temp_y ja 30. Also musst du woanders player_temp_y = player_temp_y - 0.33 stehen haben.

Ich weiß nicht genau wo dein Fehler ist, aber vielleicht hast du ja programmiert, dass wenn y größer als irgendetwas ist, dass dann immer etwas von y abgezogen wird, bzw. dass dann jump nicht True sein kann. Mach es doch am besten übersichtlicher oder probier eine andere Sprungfunktion.

MFG Lador

ToeB

BeitragDi, Dez 18, 2007 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich mache das immer so (bei Jump'n'run) :

Code: [AUSKLAPPEN]
;Die TileSets :
For xx = 0 To 31
   For yy = 0 To 23
      DrawImage TileSet,xx*25,yy*25,map(xx,yy)
      If map(xx,yy) > 0
         If RectsOverlap(p_x(1)-10,p_y(1)-12,20,1,xx*25,yy*25,25,25) Then fy = 0:p_y(ID) = oy
         If RectsOverlap(p_x(1)-10,p_y(1)+12,20,1,xx*25,yy*25,25,25) Then Jump = 0:fy = 0:p_y(ID) = oy
         If RectsOverlap(p_x(1)-12,p_y(1)-10,1,20,xx*25,yy*25,25,25) Then p_x(ID) = ox
         If RectsOverlap(p_x(1)+12,p_y(1)-10,1,20,xx*25,yy*25,25,25) Then p_x(ID) = ox   
      EndIf
   Next
Next

Code: [AUSKLAPPEN]
;mit dem Sprung :
p_oy = p_y:p_ox = p_y
If KeyHit(17) And Jump < 2 Then Jump = Jump + 1:fy = 13
If Jump > 0 Then
fy = fy - 0.9
p_y = p_y - fy
Else
fy = fy + 0.9
p_y = p_y + fy
EndIf


mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group