Jump & Run .... Brauche Hilfe

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

count-doku

BeitragDi, Jun 28, 2011 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Es hängt sich auf, weil die Kollision immer besteht,
also bleibt er immer in der While Schleife...

Durch das Löschen von And yspeed=0 erhöst du dann den yspeed wert -> die While Schleife wird nichtmehr erfüllt.

Probiere mal statt dem While ein If so wie in meinem Code.
 

PCfreak

BeitragDi, Jun 28, 2011 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber war das nicht schond er fall mit

BlitzBasic: [AUSKLAPPEN]

If KeyHit(57) And yspeed=0 Then yspeed=-jumpspeed


yspeed=0 wird ja dann auf 0 gesetzt, wenn die figur den boden, also das Bild berührt ...

deswegen frage ich mich ja wieso es ohne die abfrage funktioniert, aber mit der abfrage leggt ...
Kentnisse: QB, BB, HTML,
 

PCfreak

BeitragDi, Jun 28, 2011 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
count-doku hat Folgendes geschrieben:
Es hängt sich auf, weil die Kollision immer besteht,
also bleibt er immer in der While Schleife...

Durch das Löschen von And yspeed=0 erhöst du dann den yspeed wert -> die While Schleife wird nichtmehr erfüllt.

Probiere mal statt dem While ein If so wie in meinem Code.


Aber dabei entsteht folgendes Problem:

Der Boden ist uneben, das heißt es gibt steigungen und senkungen, löcher und so ... wenn ich es ohne
"ply=ply-gravitation#" schreibe, dann kommt die figur bei einer steigung nicht mehr hoch .

Aber egal ... ich werde jetzt auf einen ebenen boden zurück greifen weil der unebene zu viele Probleme macht Confused Smile
Kentnisse: QB, BB, HTML,

ZEVS

Betreff: doch noch eine Lösung?

BeitragDi, Jun 28, 2011 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
In der bisherigen Diskussion sind mir zwei Dinge aufgefallen:
1. In der While-Schleife hat das ply = ply-1 überhaupt nichts mit der Gravitation zu tun.
Entsprechend kryptisch ist der Code so zu lesen.
2. Auf geradem Boden bleibt der y-Wert zwar immer gleich, berechnet sich aber auf unterschiedliche Weisen:
a) ySpeed = 0
wird in der Folge auf 0+gravitation gesetzt
die While-Schleife wird nicht aufgeführt, da sich der Player nicht bewegt hat.
der Spiele springt nicht, wenn die Leertaste gedrückt wurde, da ySpeed nun gravitation = 1 ist
die Variable ply wird um ySpeed (also gravitation = 1) erhöht, wodurch der Spieler zu tief wird
b) ySpeed = gravitation = 1
wird in der Folge auf gravitation + gravitation = 2 gesetzt
die While-Schleife wird einmal ausgeführt, wodurch ySpeed wieder 0 wird
der Spieler springt, wenn die Leertaste gedrückt wurde
die Variable ply wird nicht verändert.
wie man sieht, wechseln die beiden Fälle, sodass man mal springen kann, mal nicht.

Wenn du einfach die Zeile
Code: [AUSKLAPPEN]
ply=ply+yspeed
vor die While-Schleife setzt, dürfte der erste Fall rechtzeitig korrigiert werden, sodass es klappen sollte.

Hinweis: Wer komplexe Strukturen aus Bequemlichkeitsgründen vermeidet der kann 1. nicht ausreichend programmieren und strengt sich 2. nicht einmal an, es zu lernen. Ich denke, dass auf dich dir zweite Aussage auf keinen Fall zutrifft.
=> NIEMALS aufgeben!!!!!
 

PCfreak

BeitragMi, Jun 29, 2011 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ^^

Ich habe nochmal die Grundstruktur überdacht und ein paar kleine Änderungen vorgenommen + deinen Vorschlag eingebaut.
Jetzt klappt es =D

Jetzt muss ich es nur noch hinbekommen, dass man z.b. eine steile Steigung nicht ohne Sprung hochkommt ...

ich werde es wahrscheinlich mit einem BLOCK-Bild versuchen, was das berühren des Steilen bodens nicht mal ermöglicht ^^

lasse mich gerne von anderen Ideen umleiten aber ich versuche es mal so Smile

Danke nochmal Surprised Wink
Kentnisse: QB, BB, HTML,

ZEVS

Betreff: steile Steigung

BeitragMi, Jun 29, 2011 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
du könntest die While-Schleife einfach um einen Zähler erweitern, und dann bei extremen Steigungen (hoher Zähler) die Schleife beendet und die Bewegung rückgängig macht.
Wahrscheinlich ist aber ein Block, der im Weg steht, wesentlich logischer als ein Boden, der plötzlich zur Wand wird.
 

PCfreak

BeitragMi, Jun 29, 2011 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ^^
Wobei ich das mit dem "um einen zähler erweitern" nicht verstehe ...
Woher weiß die Schleife dann, wann die steigung zu hoch ist oder wann sie passt ? ...
Ich glaube da steht wieder etwas meinen Gedanken im weg Confused Very Happy

Ich zeige euch nachher mal meinen Code + Bilder etc ...

PS.:
Gibt es in BB eine Befehl um Bilder zu drehen?
Kentnisse: QB, BB, HTML,

ZEVS

Betreff: Zähler / RotateImage

BeitragMi, Jun 29, 2011 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Zähler:
BlitzBasic: [AUSKLAPPEN]
Const MAX_COUNTER = 5; Maximale Steigung: 5 (500%)
;...
; Mainloop
;...
Local counter = 0
While ImagesCollide(player,plx,ply,0,lvl1,0,0,0)
yspeed=0
ply=ply-1
counter = counter+1
If counter > MAX_COUNTER Then
plx = last_plx
ply = last_ply
Exit
EndIf
Wend

Local last_plx = plx
Local last_ply = ply


If KeyHit(57) And yspeed=0 Then yspeed=-jumpspeed
ply=ply+yspeed

If KeyDown(203) plx=plx-4
If KeyDown(205) plx=plx+4
;...

(ungetestet)

Die Variable counter zählt, wie weit der Spieler nach oben geschoben wurde.
Wenn dies zu weit ist (counter > MAX_COUNTER) wird die Bewegung des letzten Frames rückgängig gemacht (plx = last_plx : ply = last_ply) und abgebrochen.

Die Variablen last_plx und last_ply werden danach immer auf den letzten Stand gebracht.


Die Funktion, die du suchst, heißt RotateImage
 

PCfreak

BeitragMi, Jun 29, 2011 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ^^

Jetzt muss ich das noch ein bisschen anpassen und alles als Funktionen absetzen =)

aber danke für beides Very Happy

EDIT ::

Hier mal mein Werk, zwar ist das Menü nicht drin, aber das kommt später noch, weil es ein bisschen Buggt ^^

Einfach klicken:
>> Download
Kentnisse: QB, BB, HTML,
 

PCfreak

BeitragMi, Jun 29, 2011 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry eine Frage habe ich doch noch:

Ich möchte die While-Schleife in eine Funktion setzen.
Aber wenn ich dies tue, bricht das Programm ab, Markiert die While-Bedingung und sagt, dass das Bild nicht existiert ....
Dieses problem hatte ich schon öfters ...

Wieso kann ich so etwas nicht in eine Function setzen ?
Kentnisse: QB, BB, HTML,

Xeres

Moderator

BeitragMi, Jun 29, 2011 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Variable wird Local sein. Um sie in Funktionen nutzen zu können, musst du sie der Funktion als Parameter übergeben oder Global deklarieren.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

PCfreak

BeitragFr, Jul 01, 2011 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ^^

Klappt soweit alles Wink

Echt cooles Forum
Kentnisse: QB, BB, HTML,

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group