Was kann ich bei diesem Code besser machen ? [Gelöst]

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Ronon_Dex

Betreff: Was kann ich bei diesem Code besser machen ? [Gelöst]

BeitragFr, Dez 09, 2011 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, Ich bin es mal wieder.
Ich wollte euch mal fragen wie ich bei dem nachfolgendem Code Verbessern kann, dass mein Spieler beim hinunter gehen von Bergen/Erhöhungen nicht ruckelt.
Er ist etwas Improvisiert da ich zb von LinePick nichts verstehe.

Die Abfrage:
BlitzBasic: [AUSKLAPPEN]
If EntityCollided(player,type_scene)
jumperlaubnis = True
Else
If Differenz(boden,player)>2 Then
TranslateEntity player,0,-0.35,0
Else
jumperlaubnis = True
EndIf
EndIf

Die Funktion:
BlitzBasic: [AUSKLAPPEN]
Function Differenz(grund,spieler)
TY#=TerrainY(grund,X,Y,Z)
PY#=EntityY(spieler)
diff#=PY-TY
Return diff
End Function


p.s: der Rest des Codes auf Anfrage


mfg
Ronon
  • Zuletzt bearbeitet von Ronon_Dex am So, Dez 18, 2011 17:11, insgesamt einmal bearbeitet

ZEVS

BeitragFr, Dez 09, 2011 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Was hältst du von ein bisschen realistischer Physik?
Ich erkläre es ja gerne, aber das habe ich schon vor ein paar Wochen gemacht: https://www.blitzforum.de/foru...hp?t=37981

Zu LinePick
Die Dokumentation recht übersichtlich. Außerdem verwendet LinePick Vektoren statt Winkeln, was auch einiges einfacher machen sollte.
Beispiel: Wie sucht man mit LinePick nach unter dem Spieler liegenden Objekten?
BlitzBasic: [AUSKLAPPEN]
LinePick playerX, playerY, playerZ, 0, -1, 0

Mit anderen Worten:
Starte die Suche nach Objekten bei playerX/Y/Z.
Erhöhe nach jeder Kontrolle den X-Wert um 0, den Y-Wert um -1 und den Z-Wert um 0.

Wo ist hier das Problem?

ZEVS
 

Ronon_Dex

BeitragFr, Dez 09, 2011 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Okey wenn du das so schreibst wirkt es plötzlich so einfach Confused

Aber wie frage ich das dann ab ?

Und ruckelt es dann beim Bergab laufen nicht genauso weil ich ja trotzdem TranslateEntity benutzen muss

@Deine Erklärung
Was ist wenn man auf einem Entity steht ?

ZEVS

BeitragFr, Dez 09, 2011 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Ruckeln hat in der Tat andere Ursachen. Das kann mit den Meshes zusammenhängen, aber auch an den Collisions-Einstellungen. Es stellt sich die Frage, ob du Collisions sowieso brauchst oder ob du dir das nicht besser nachbastelst (einfach PlayerY = TerrainY, wenn das Handle passt).

ZEVS
 

Ronon_Dex

BeitragSa, Dez 10, 2011 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem bei TerrainY und PlayerY ist das die beiden (auser auf einer Ebenen Fläche) niemals den Gleichen abstand haben bzw gleich sind

Midimaster

BeitragSa, Dez 10, 2011 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Ruckeln könnte davon kommen, dass bei jeder Berühung zu viel addiert wird und dadurch sich beides nun zu weit entfernt, was nun wiederum dazu führt, dass sie viel zu weit auseinander geraten, wass wiederum dazu führt, dass sie sich annähern.

Vielleicht wäre ein sinnvoller Weg, wenn man bei sehr kleinen Distanzen nur noch ganz wenig korrigiert, die Veränderung (Addy) also abhängig von de Distanz macht: Also z.b. immer 1/2 der Distanz überbrückt. So dauert es mehrere FLIPs bis der richtige Abstand erreicht ist, was viel harmonischer wirkt. Und da ja während dieser FLIPs der Abstand immer noch kleiner wird wird auch das 1/2 daraus immer noch feiner.

Beispiel festes Addy:

Ausgangssituation:
Boden bei 9.5 Spieler bei 9.6, AddY bei +/- 0.1

das ergibt folgende SpielerY:
9.6 also -0.1 =9.5 aber Kollision!
also danach 9.5 + 0.1 -> SpielerY= 9.6
dann wieder 9.6 - 0.1 -> SpielerY= 9.5 aber Kollision
Folge: Figur scheint zu hüpfen oder ruckel.

Beispiel für 1/2 Distanz-AddY:

Ausgangssituation:
Boden bei 9.5 Spieler bei 9.6, AddY bei +/- 1/2-Distanz

das ergibt folgende SpielerY:
9.6 also D=-0.1 Addy=0.05 -> SpielerY=9.55
9.55 also D=-0.05 Addy=0.025 -> SpielerY= 9.525
9.525 also D=-0.025 Addy=0.012 -> SpielerY= 9.513
9.513 also D=-0.013 Addy=0.007 -> SpielerY= 9.506
Folge: Figur scheint sanft einzuschweben.

Selbst bei ansteigendem Gelände wird optimal ausgeglichen:

Beispiel für 1/2 Distanz-AddY:

Ausgangssituation:
Boden bei 9.5, steigt um 0.05 Spieler bei 9.6, AddY bei +/- 1/2-Distanz

das ergibt folgende SpielerY:
9.6 / 9.5 also D=-0.1 Addy=0.05 -> SpielerY=9.55
9.55 /9.55 also D=-0.0 Addy=0.0 -> SpielerY= 9.55
9.55 /9.60 also D=+0.05 Addy=0.025 -> SpielerY= 9.575
9.575 / 9.65 also D=-0.075 Addy=0.037 -> SpielerY= 9.617
Folge: Figur scheint sanft einzuschweben.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Ronon_Dex

BeitragDi, Dez 13, 2011 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bekomm das Ruckeln beim Berab laufen einfach nicht weg ..
Die Antwort von dir Midimaster versteh ich nicht so recht

Ich hab mit schon vielem rumgespielt wie zb auch bei einer kleineren DIfferenz langsamer anziehen, doch außer das es Dumm aussieht wenn man spring, ruckelt der Spieler immer noch den Berg runter.

Wenn ihr wollt Poste ich auch den Kompletten Code dann könnt ihr es testen.

Midimaster

BeitragSa, Dez 17, 2011 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
dann teste doch mal mit einem DEBUGLOG-Befehl wie der y-Wert der Figur sich laufend ändert. Möglicherweise ist ja irgendwo in der Berechnung eine INT-Variable statt einer FLOAT. Durch die Rundung käme es dann zu Wertesprüngen.

BlitzBasic: [AUSKLAPPEN]
If EntityCollided(player,type_scene)
jumperlaubnis = True
Else
DebugLog "differenz=" + Differenz(boden,player)
If Differenz(boden,player)>2 Then
TranslateEntity player,0,-0.35,0
Else
jumperlaubnis = True
EndIf
EndIf


Wenn Deine Figur sich dem "kritischen Bereich von +2 nähert, könntest du mit kleineren Y-Bewegungen näher an die 2 kommen als mit -0.35, was ja im Extremfall zu einem Wert von bis zu 1.66 Abstand führen könnte

Wieso überhaupt >2?

Und wo ist der Code für Bergauf?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Ronon_Dex

BeitragSa, Dez 17, 2011 10:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja meine Rechnung ist eher ganz einfach gehalten vielleicht liegt es daran.
Bergauf funktioniert alles ganz normal so wie es soll, ohne ruckeln, ohne langsamer werden.

Ich Poste mal hier meinen Kompletten Code damit du/ihr seht was alles zusammen hängt.
Es ist alles durch Komentare Abgegliedert, ist also keine große Suchaktion Wink

Hier die nötigen Dateien

BlitzBasic: [AUSKLAPPEN]
AppTitle "3D Necro Game"
Global gs1=800,gs2=600,menue=1,menue_tab=0
.start
Global hoch=17,runter=31,rechts=32,links=30,shift=42,leertaste=57,pup=201,pdown=209
Graphics3D gs1,gs2,32,0
SetBuffer BackBuffer()

Global speed#=0.2,move=False
Global type_scene=1
Global X#=184.0,Y#=11.0,Z#=141.0
Global jumperlaubnis=False,jump=False,jump_hohe=0

texture_boden = LoadTexture("gfx\boden.jpg")
texture_kiste = LoadTexture("gfx\kiste.jpg")
texture_wasser = LoadTexture("gfx\wasser.jpg")
ScaleTexture texture_boden,40,40
ScaleTexture texture_wasser,15,15

Global menue_title = LoadImage("gfx\menue_title.png")
ResizeImage menue_title,gs1,gs2

Global timer=CreateTimer(50)

;Boden -----------------------------
grund = CreatePlane()
wasser = CreatePlane()
boden = LoadTerrain("gfx\highmap.png")
ScaleEntity boden,1,50,1
EntityType boden,1
EntityType grund,1
EntityTexture boden,texture_boden
EntityTexture grund,texture_wasser
EntityTexture wasser,texture_wasser
PositionEntity wasser, 0,1.5,0
PositionEntity grund, 0,0.1,0

;Sky -------------------------------
sky = CreatePlane()
EntityTexture sky,texture_sky
PositionEntity sky, 0,50,0
;RotateEntity sky,

;Player kann durch y=4.5 laufen ----
Global player = CreatePivot()
PositionEntity player,X,Y+2,Z
EntityRadius player,1.5
EntityType player, 2

;Kamera ----------------------------
Global kamera = CreateCamera(player)
PositionEntity kamera,0,1.0,0

;Objekte ---------------------------
kiste_1 = CreateCube()
PositionEntity kiste_1,6,3,6
EntityTexture kiste_1,texture_kiste
ScaleEntity kiste_1,1,1,1
EntityType kiste_1,1

kiste_2 = CreateCube()
PositionEntity kiste_2,6,1,6
EntityTexture kiste_2,texture_kiste
ScaleEntity kiste_2,1,1,1
EntityType kiste_2,1

kiste_3 = CreateCube()
PositionEntity kiste_3,4,1,6
EntityTexture kiste_3,texture_kiste
ScaleEntity kiste_3,1,1,1
EntityType kiste_3,1

;Licht -----------------------------
licht = CreateLight()
RotateEntity licht,90,0,0

Collisions 2,1,2,2

;-------------------------------Main Schleife------------------------------------------------------------------

Repeat
WaitTimer timer

; Das Menü ---------------------

While menue=1
If KeyHit(1) menue=0
DrawImage menue_title,0,0
Select menue_tab
Case 0
FreeImage menue_zeiger : FreeImage button_800x600 : FreeImage button_1024x768 : FreeImage button_1600x1200 : FreeImage button_andere

menue_zeiger = LoadImage("gfx\zeiger.png")
button_spielen = LoadImage("gfx\button_spielen.png")
button_optionen = LoadImage("gfx\button_optionen.png")
button_beenden = LoadImage("gfx\button_beenden.png")
DrawImage button_spielen,gs1/2-130,gs2/4
DrawImage button_optionen,gs1/2-130,gs2/4+80
DrawImage button_beenden,gs1/2-130,gs2/4+160
DrawImage menue_zeiger,MouseX(),MouseY()

If menue=1 Then
If ImagesCollide(menue_zeiger,MouseX(),MouseY(),0,button_spielen,gs1/2-130,gs2/4,0) And MouseHit(1) Then menue=0
If ImagesCollide(menue_zeiger,MouseX(),MouseY(),0,button_optionen,gs1/2-130,gs2/4+80,0) And MouseHit(1) Then menue_tab=1
If ImagesCollide(menue_zeiger,MouseX(),MouseY(),0,button_beenden,gs1/2-130,gs2/4+160,0) And MouseHit(1) Then End
EndIf

Case 1
FreeImage menue_zeiger : FreeImage button_spielen : FreeImage button_optionen : FreeImage button_beenden

menue_zeiger = LoadImage("gfx\zeiger.png")
button_800x600 = LoadImage("gfx\button_800x600.png")
button_1024x768 = LoadImage("gfx\button_1024x768.png")
button_1600x1200 = LoadImage("gfx\button_1600x1200.png")
button_andere = LoadImage("gfx\button_andere.png")
DrawImage button_800x600,gs1/2-130,gs2/4
DrawImage button_1024x768,gs1/2-130,gs2/4+80
DrawImage button_1600x1200,gs1/2-130,gs2/4+160
DrawImage button_andere,gs1/2-130,gs2/4+240
DrawImage menue_zeiger,MouseX(),MouseY()

If menue=1 Then
If ImagesCollide(menue_zeiger,MouseX(),MouseY(),0,button_800x600,gs1/2-130,gs2/4,0) And MouseHit(1) Then gs1=800 gs2=600 menue_tab=0 Goto start
If ImagesCollide(menue_zeiger,MouseX(),MouseY(),0,button_1024x768,gs1/2-130,gs2/4+80,0) And MouseHit(1) Then gs1=1024 gs2=768 menue_tab=0 Goto start
If ImagesCollide(menue_zeiger,MouseX(),MouseY(),0,button_1600x1200,gs1/2-130,gs2/4+160,0) And MouseHit(1) Then gs1=1600 gs2=1200 menue_tab=0 Goto start
If ImagesCollide(menue_zeiger,MouseX(),MouseY(),0,button_andere,gs1/2-130,gs2/4+240,0) And MouseHit(1) Then gs1=Input("Höhe: ") gs2=Input("Breite:" ) menue_tab=0 Goto start
EndIf
End Select
Flip
Cls
Wend

; Das Menü ende -----------------

menue_tab=0

; Player Steuerrung -------------

If KeyDown(shift) Then
speed=0.3
Else speed=0.2
EndIf
If KeyHit(1) menue=1
If KeyDown(hoch) MoveEntity player,0,0,speed move=True
If KeyDown(runter) MoveEntity player,0,0,-0.06 move=True
If KeyDown(rechts) MoveEntity player,0.05,0,0 move=True
If KeyDown(links) MoveEntity player,-0.05,0,0 move=True
If KeyHit(leertaste) And jumperlaubnis = True Then
jump = True
move=True
EndIf
If jump = True Then
jump_hohe = jump_hohe +1
MoveEntity player,0,0.55,0
End If
If jump_hohe >= 13 Then
jump = False
jumperlaubnis = False
jump_hohe = 0
End If
move=False
mouseXS = MouseXSpeed()
mouseYS = MouseYSpeed()
pitch# = EntityPitch(kamera) + (mouseYS*.2)
yaw# = EntityYaw(player) - (mouseXS*.2)
RotateEntity kamera,pitch,0,0
RotateEntity player,0,yaw,0
bak=bak+1
If bak=5
bak=1
MoveMouse gs1/2,gs2/2
EndIf

; Player Steuerrung ende --------

; Gravitation -------------------

If EntityCollided(player,type_scene)
jumperlaubnis = True
Else
If Differenz(boden,player)>2.0 Then
TranslateEntity player,0,-0.35,0
Else If Differenz(boden,player)>0.90 And Differenz(boden,player) < 1.6 Then
TranslateEntity player,0,-0.01,0
jumperlaubnis = True
EndIf
EndIf
If Differenz(boden,player)<2.2 Then jumperlaubnis=True

; Gravitation ende --------------

RenderWorld
UpdateWorld
X=EntityX(player)
Y=EntityY(player)
Z=EntityZ(player)
Text 0,1,"Benutze die W;A;S;D tasten zum bewegen / Schift zum rennen / Leertaste zum Springen"
Text 0,15,"TY"+TerrainY(boden,X,Y,Z)
Text 0,30,"X:"+X
Text 0,45,"y:"+Y
Text 0,60,"z:"+Z
Flip
Cls
Until KeyHit(207)
End

;-------------------------------Functions--------------------------------------------------------------

Function Differenz#(grund,spieler)
TY#=TerrainY(grund,X,Y,Z)
PY#=EntityY(spieler)
diff#=PY-TY
Return diff
End Function
  • Zuletzt bearbeitet von Ronon_Dex am Sa, Dez 17, 2011 14:05, insgesamt 2-mal bearbeitet

Midimaster

BeitragSa, Dez 17, 2011 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast Du das mit dem DEBUGLOG überhaupt ausprobiert?

BlitzBasic: [AUSKLAPPEN]
Print differenz()
WaitKey()

Function differenz()
diff#=0.1
Return diff
End Function


Was ist da falsch? Die Funktion RETURNed eine INT und keine FLOAT. So geht es richtig:

BlitzBasic: [AUSKLAPPEN]
Print differenz()
WaitKey()

Function differenz#()
diff#=0.1
Return diff
End Function
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Ronon_Dex

BeitragSa, Dez 17, 2011 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir leid ich hatte das vorher gepostet.
...
Ich weis jetzt zwar wie meine Differenz ist jedoch bringt mich das bei meinem Problem mit dem Ruckeln nicht weiter.
Ich habe schon verschiedene Sachen ausprobiert:
- Differenz abfrage erhöht
- Differenz abfrage verringert
- 2 Gravitations stufen bei verschiedener Differenz (Y=-0.35 und Y=-0.01)
- Mit den Werten der Anziehung herumgespielt
lezteres sieht man oben in meinem Post,

jedoch hat nichts davon etwas gebracht, es sah nur stellenweise dumm aus wenn der Spieler kurz vor dem Boden ganz langsam sinkt.

Ich schätze das Problem ist, das ich zu langsam angezogen werde beim Bergablaufen und deswegen die Schneller Stufe wieder eingreift, doch sobald ich die 2 Stufe ein bisschen verschnellere, kommt ja wieder das Ruckeln raus(das eh die ganze Zeit, beim Bergab laufen, da ist)

Midimaster

BeitragSa, Dez 17, 2011 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
und? wie ist denn deine Differenz? Hast Du die Funktion jetzt geändert? so wie bei dir liefert die nur 0 oder 1 zurück!

Und meine Fragen hast Du auch nicht beantwortet! Wieso >2?


und dann mal was zu deinem Code....

So liefert man das echt nicht ab, wenn man Hilfe möchte. Wer soll diesen Code starten können ohne alle deine Dateien zu haben?

Bitte reduziere Deine Code auf das Nötigste. Entferne alles, was mit Texturen zu tun hat und sende die Terrainmap als Bild im Beitrag mit. Oder erwartest Du , dass jeder der dir helfen will erst mal den Code so lange entlaust, bis er ihn endlich zum Laufen bringt?

Ich habe ich gerade mal versehentlich gestartet und bin nicht wieder rausgekommen und musste echt den RESET am Computer betätigen. Also wirklich....

Hier mal ein paar Regeln für Code, der an Dritte gehen soll:

Zitat:
- KEINE unnötigen Dateien laden
- Nötige Dateien mitliefern
- Keine unnötigen Code-Zeilen
- Kein Full-Screen Graphics!!! Wie willst du den DEBUGGER sehen?
- Keine Auto-Mouse-Position. Wie will ich da noch wo anders hinklicken?
- Eine Abbruchmöglichkeit per Tastatur einbauen


Kein Wunder, dass keiner hilft....

und wieso sind die Kisten so weit weg? Was soll das während der Testphase? Wer außer dir solll die so jemals finden?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Ronon_Dex

BeitragSa, Dez 17, 2011 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir leid an die GFX's dachte ich nicht Embarassed
Ist aber kein Grund gleich unfreundlich zu werden, Ich bin auch nur ein Mensch und habe meine Fehler.

Man kann den Code mit "Ende" Beenden ... wenn man nicht im Menü ist (ESC zum beenden vom Menü) oder bei den Grafiken auf Beenden.
Ich hatte das eig nur gepostet um den Zusammenhang zu allem zu erkennen.

Die differenz ist sehr unterschiedlich immer zwischen 1,5 (am anfang) und 1,95 (nach dem die höhe verändert wurde und dann wieder am gleichen Platz ist)

2,0 habe ich gewählt weil unter normalen umständen die Schwankung von der Differenz nicht höher als 2,0 ist und deshalb ab 2,0 ein Sprung/Fall sein muss

(habe im Post oben auf Fenstermodus gestellt und poste gleich einen Link wo man die Grafiken runterladen kann)

//Edit: Hier die Dateien
  • Zuletzt bearbeitet von Ronon_Dex am Sa, Dez 17, 2011 13:57, insgesamt einmal bearbeitet

Midimaster

BeitragSa, Dez 17, 2011 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
wie ist es den damit?

BlitzBasic: [AUSKLAPPEN]
		If Differenz(boden,player)>2.0 Then
TranslateEntity player,0,-0.35,0
Else
TranslateEntity player,0,-0.01,0
jumperlaubnis = True
EndIf


hier mal eine dramtische gekürzte Version für alle anderen:

BlitzBasic: [AUSKLAPPEN]

AppTitle "3D Necro Game"
Global gs1=800,gs2=600,menue=1,menue_tab=0
.start
Global hoch=17,runter=31,rechts=32,links=30,shift=42,leertaste=57,pup=201,pdown=209
Graphics3D gs1,gs2,32,2
SetBuffer BackBuffer()

Global speed#=0.2,move=False
Global type_scene=1
Global X#=0.0,Y#=3.0,Z#=-11.0
Global jumperlaubnis=False,jump=False,jump_hohe=0

;texture_boden = LoadTexture("gfx\boden.jpg")
;texture_kiste = LoadTexture("gfx\kiste.jpg")
;texture_wasser = LoadTexture("gfx\wasser.jpg")
;ScaleTexture texture_boden,40,40
;ScaleTexture texture_wasser,15,15

;Global menue_title = LoadImage("gfx\menue_title.png")
;ResizeImage menue_title,gs1,gs2

Global timer=CreateTimer(60)

;Boden -----------------------------
grund = CreatePlane()
wasser = CreatePlane()
;boden = LoadTerrain("gfx\highmap.png")
boden = CreateTerrain(256)
ScaleEntity boden,1,50,1
EntityType boden,1
EntityType grund,1
;EntityTexture boden,texture_boden
;EntityTexture grund,texture_wasser
;EntityTexture wasser,texture_wasser
PositionEntity wasser, 0,1.5,0
PositionEntity grund, 0,0.1,0

;Sky -------------------------------
sky = CreatePlane()
;EntityTexture sky,texture_sky
PositionEntity sky, 0,50,0
;RotateEntity sky,

;Player kann durch y=4.5 laufen ----
Global player = CreatePivot()
PositionEntity player,X,Y+2,Z
EntityRadius player,1.5
EntityType player, 2

;Kamera ----------------------------
Global kamera = CreateCamera(player)
PositionEntity kamera,0,1.0,0

;Objekte ---------------------------
kiste_1 = CreateCube()
PositionEntity kiste_1,6,3,6
;EntityTexture kiste_1,texture_kiste
ScaleEntity kiste_1,1,1,1
EntityType kiste_1,1

kiste_2 = CreateCube()
PositionEntity kiste_2,6,1,6
;EntityTexture kiste_2,texture_kiste
ScaleEntity kiste_2,1,1,1
EntityType kiste_2,1

kiste_3 = CreateCube()
PositionEntity kiste_3,4,1,6
;EntityTexture kiste_3,texture_kiste
ScaleEntity kiste_3,1,1,1
EntityType kiste_3,1

;Licht -----------------------------
licht = CreateLight()
RotateEntity licht,90,0,0

Collisions 2,1,2,2

;-------------------------------Main Schleife-------------------------------------------------------------------------------------------------------------------

Repeat
WaitTimer timer

; Das Menü ---------------------


; Das Menü ende -----------------

menue_tab=0

; Player Steuerrung -------------

If KeyDown(shift) Then
speed=0.3
Else speed=0.2
EndIf
; If KeyHit(1) menue=1
If KeyDown(hoch) MoveEntity player,0,0,speed move=True
If KeyDown(runter) MoveEntity player,0,0,-0.06 move=True
If KeyDown(rechts) MoveEntity player,0.05,0,0 move=True
If KeyDown(links) MoveEntity player,-0.05,0,0 move=True
If KeyHit(leertaste) And jumperlaubnis = True Then
jump = True
move=True
EndIf
If jump = True Then
jump_hohe = jump_hohe +1
MoveEntity player,0,0.55,0
End If
If jump_hohe >= 13 Then
jump = False
jumperlaubnis = False
jump_hohe = 0
End If
move=False
mouseXS = MouseXSpeed()
mouseYS = MouseYSpeed()
pitch# = EntityPitch(kamera) + (mouseYS*.2)
yaw# = EntityYaw(player) - (mouseXS*.2)
RotateEntity kamera,pitch,0,0
RotateEntity player,0,yaw,0
bak=bak+1
If bak>5
bak=1
MoveMouse gs1/2,gs2/2
EndIf

; Player Steuerrung ende --------

; Gravitation -------------------

If EntityCollided(player,type_scene)
jumperlaubnis = True
Else
If Differenz(boden,player)>2.0 Then
TranslateEntity player,0,-0.1,0
Else
TranslateEntity player,0,-0.01,0
jumperlaubnis = True
EndIf
EndIf
If Differenz(boden,player)<2.2 Then jumperlaubnis=True

; Gravitation ende --------------

RenderWorld
UpdateWorld
X=EntityX(player)
Y=EntityY(player)
Z=EntityZ(player)
Text 0,1,"Benutze die W;A;S;D tasten zum bewegen / Schift zum rennen / Leertaste zum Springen"
Text 0,15,"TY"+TerrainY(boden,X,Y,Z)
Text 0,30,"X:"+X
Text 0,45,"y:"+Y
Text 0,60,"z:"+Z
Flip 0
Cls
Until KeyDown(1)
End

;-------------------------------Functions-----------

Function Differenz#(grund,spieler)
TY#=TerrainY(grund,X,Y,Z)
PY#=EntityY(spieler)
diff#=PY-TY
Return diff
End Function


Nachtrag I
der TerrainLoad müßte natürlich wieder aktiviert werden, aber ich warte noch auf die Veröffentlichung des Terrain....

Nachtrag II

ich hab mal die Sinkrate von den 0.35 auf 0.1 reduziert, sonst sinkt er viel zu schnell. Das ganze sieht bei einem waagrechten Terrain ganz harmonisch aus! Ich warte immer noch auf das Terrainbild.... Das kannst du einfach in dein Archiv hochladen und dann hier im Beitrag verlinken! Wart.... wart....
  • Zuletzt bearbeitet von Midimaster am Sa, Dez 17, 2011 14:04, insgesamt einmal bearbeitet
 

Ronon_Dex

BeitragSa, Dez 17, 2011 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Terrain ist bereits im GFX ordner den ich oben zum Download gestellt habe dabei (habe ihn mit hochgeladen)
somit kann jeder wieder die Volle Version von mir nutzen Smile

... Das ruckeln bleibt leider erhalten mit diesem Code:
BlitzBasic: [AUSKLAPPEN]
If Differenz(boden,player)>2.0 Then
TranslateEntity player,0,-0.35,0
Else
TranslateEntity player,0,-0.01,0
jumperlaubnis = True
EndIf


vielleicht wird es ja jetzt klarer dadurch, dass man jetz das Gerüst komplett testen kann

Von BlitzForum: https://www.blitzforum.de/upload/file.php?id=11239
  • Zuletzt bearbeitet von Ronon_Dex am Sa, Dez 17, 2011 14:08, insgesamt einmal bearbeitet

Midimaster

BeitragSa, Dez 17, 2011 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
und nochmal die gleiche Frage.... Hast Du die Funktion in umgeändert? Im Beitrag steht sie immer noch ohne #
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Ronon_Dex

BeitragSa, Dez 17, 2011 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ja habe sie umgeändert .. habe es nun auch im Beitrag geändert

Midimaster

BeitragSa, Dez 17, 2011 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich hab das Ganze getestet....

der Fehler rührt daher, weil eben manchmal um 0.35 reduziert werden kann, danach ist er zu nah am Boden, da geht wieder gar nix und er bewegt sich fast waagrecht, bis dann wieder der Abstand so groß ist, dass gleich 0.35 abgezogen werden. Durch diesen Wechsel entsteht der Eindruck des Ruckelns. eigentlich ist es aber eine treppenartige Bewegung.

wie schon in meinem ersten Beitrag erwähnt, wäre eine harmonische Bewegung klüger als eine Bewegung die an einem festgelegten Abstand (>2) plötzlich endet.

mach es doch so, dass du die Bewegung mit einer Bescheunigung harmonisierst.

BlitzBasic: [AUSKLAPPEN]
	; Gravitation -------------------

If EntityCollided(player,type_scene)
jumperlaubnis = True
Beschleunigung#=0.01
Else
DebugLog " >0 " + Beschleunigung# + " " + MilliSecs()
Beschleunigung#=Beschleunigung#+0.01
EndIf
TranslateEntity player,0,-Beschleunigung,0
If Differenz(boden,player)<2.2 Then jumperlaubnis=True

; Gravitation ende --------------
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Ronon_Dex

BeitragSo, Dez 18, 2011 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, Midimaster
mit diesem Code klappt es schon viel besser.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group