Jump & Run .... Brauche Hilfe

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

PCfreak

Betreff: Jump & Run .... Brauche Hilfe

BeitragMo, Jun 27, 2011 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay ...
Ich habe euch vor fast einem Jahr schon mit meinen Anfängerfragen genervt ...
Zitat:

es ist schon fast ein bisschen Peinlich aber ich habe ein kleines Problem mit einer art
Jump & Run game, wobei es garnicht nach soeinem aussieht ...

folgender Code:

Code: [AUSKLAPPEN]

Graphics 1366,768,0,1
SetBuffer BackBuffer()

lvl1 = LoadImage("hindernis1.bmp")
pl1  = LoadImage("player1.bmp")

MaskImage lvl1,255,255,255
MaskImage pl1,255,255,255

Repeat
Cls
DrawImage lvl1,0,0
DrawImage pl1,x,y

If KeyDown(203) Then x=x-3
If KeyDown(205) Then x=x+3
;If KeyDown(208) Then y=y+2
;If KeyDown(200) Then y=y-2

If Not ImagesCollide(pl1,x,y,0,lvl1,0,-2,0)
y=y+4
End If
If ImagesCollide(pl1,x,y,0,lvl1,0,-2,0)
y=y-1
End If




Flip
Until KeyDown(1)
End




Zur Info: Die Figur ist eine Kugel und das Hindernis ein Boden (hindernis, =lvl1) mit Löchern und absenkungen ...

Jetzt zum problem:
Wie bekomme ich es hin, dass die Figur (pl1) auf dem Boden bleibt, und bei steigungen des Bodens auch wieder mitsteigt?

Ich habe es im 1. versuch so gemacht, dass die Figur imer bis zum boden geht ... dann war schluss...

Code: [AUSKLAPPEN]

If Not ImagesCollide(pl1,x,y,0,lvl1,0,-2,0)
y=y+4
End If


Und so wie ich es jetzt habe, "wackelt" das kleine kerlchen immer so klein hoch und runter ...

alle anderen prpbleme kann ich beheben ... nur das ist mir ein Dorn im Auge ...

Ich bitte (abermals) um eure Hilfe ...

Mit freundlichen Grüßen,
Tim-B.
Kentnisse: QB, BB, HTML,

ZEVS

Betreff: While statt If

BeitragMo, Jun 27, 2011 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Code: [AUSKLAPPEN]

If ImagesCollide(pl1,x,y,0,lvl1,0,-2,0)
y=y-1
End If

Das mit dem Wackeln ist ganz natürlich, da er pro Frame immer nur ein Pixel nach oben geht.
Für den fall, dass die Steigung größer als 1 Pixel / Frame ist, muss er entsprechend mehrere Pixel hoch.
Ich sehe die beste Lösung in einer while-Schleife:
Code: [AUSKLAPPEN]

While ImagesCollide(pl1,x,y,0,lvl1,0,-2,0)
y=y-1
Wend

(ungetestet)

Ich hoffe, dass ich dir helfen konnte
 

PCfreak

BeitragMo, Jun 27, 2011 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich danke dir ^^
Vielen vielen Dank =D

so ... meinj Ziel jetzt:

Mich erst melden, wenn das Spiel fertig ist, um dann die kommunikation zweier Programme via Internet zu erfragen =D

Mit freundlichen grüßen,
Tim ...

Zitat:

PS.:

Eine Frage:
Wie bekomme ich es hin, dass wenn der Boden kurzzeitig aufhört (dass ein loch entsteht),
dass die Figur nicht mehr hoch springt wenn sie gegen das hindernis seitlich gegen kommt, sondern dass sie weiter runter fällt ?

Muss ich dafür ein weiteres Bild erstellen was da an der seite hängt, dass die figur garnicht erst an den Boden kommt ?
... Very Happy
Kentnisse: QB, BB, HTML,

Ana

BeitragMo, Jun 27, 2011 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ich heute faul und launisch bin, hab ich mir deinen Code mal nicht durchgelesen sondern rede mal in den blauen Dunst hinein.

Du hast eine Figur, die eine X/Y koordinate hat und ein hindernis das vermutlich auch eine hat, sowie beide eine Höhe haben. Ist die Figur auf diesem Objekt drauf, so ist die X Koordinate der Figur, größer als die des Hindernis, aber kleiner als die des Hindernises plus seine Breite, ähnlich mit der Höhe, wenn die Figur draufsteht, dann ist ihre Y koordinate minus ihrer Höhe gleich der Y Koordinate des Hindernisses.

Natürlich gilt das nur wenn du sie alle oben links handles (was ja normalerweise der fall ist).

Mit ein paar geschickten If abfragen kannst du sicherlich herausbekommen wo die Figur X Achsenmäßig ist, auf welchem Objekt und dann die Y differenz prüfen.


Edit: Okay das ist viel weniger Code als ich dachte Wink

So wie du es geschrieben hast, denke ich kannst du einfach zusätzlich nachprüfen, ob
BlitzMax: [AUSKLAPPEN]
If y - ImageHeight(player) = -2
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine
  • Zuletzt bearbeitet von Ana am Mo, Jun 27, 2011 21:59, insgesamt einmal bearbeitet
 

PCfreak

BeitragMo, Jun 27, 2011 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy Idea

Genau wirklich genau das habe ich auch ungefär vor 2 minuten gedacht Cool

Aber danke nochmal
Kentnisse: QB, BB, HTML,
 

PCfreak

BeitragDi, Jun 28, 2011 14:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay entschuldigt .....

muss mich wohl doch noch einmal bemerkbar machen:

kann mir jemand eine gute, sehr gute Sprungsequenz zusammen basteln?
Ich bekomme es einfach nicht hin Sad

Ich bräuchte am besten eine funktion, mit der bestimmung, wie hoch und wie schnell die figur nach oben/nach unten springt ....

Vielen Dank im vorraus ... Rolling Eyes
Kentnisse: QB, BB, HTML,

BladeRunner

Moderator

BeitragDi, Jun 28, 2011 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
http://de.wikipedia.org/wiki/Wurfparabel

Viel Erfolg und Freude beim Lernen und Schreiben deiner eigenen Funktion.
(Ansonsten stehe ich für 25€ netto die Stunde zur Verfügung, aber wenn Du ja programmieren lernen willst solltest Du dir das Geld sparen...)
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
 

PCfreak

BeitragDi, Jun 28, 2011 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann Programmieren -.-

es ist nicht so dass ich NICHTS hinbekomme ......

Ich bin kein Kleines Kind, was wirklich alles erfragt ...
die meisten Fehler bemerke ichs elbst !

Aber diese Sprung sequenz ... die kann ich halt nicht ...
sorry aber du ahst auch mal klein angefangen Mad

EDIT ::

Ich brauche einfach nur Hoch - Runter ...
Die kurve entsteht ja dabei, wenn man nach licks/rechts geht ....
dazu müsste man die Sprung-sequenz aber so hinbiegen, dass man erst schnell springt, dann langsamer wird, und so auch wieder runter fällt ...
verstanden oder zu undeutlich ? Very Happy
Kentnisse: QB, BB, HTML,

Xeres

Moderator

BeitragDi, Jun 28, 2011 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Code funktioniert nicht? Wir schauen drüber und können dir vielleicht einen Hinweis geben.
Du willst fertig-zum-einfügen Code? Lern' programmieren! Dazu gehört manchmal auch Logik, Mathe & Physik.
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)

count-doku

BeitragDi, Jun 28, 2011 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich ist das ganze einfach...
Du musst nur einen YSpeed Wert am Sprunganfang setzten und diesen dann langsam so verändern,
dass der Spieler schnell beginnt, abbremst und dann umdreht und wieder schneller fällt.

Hier mal ein Beispiel, nicht in einer Funktion aber zum Verstehen sollte es reichen.
BlitzBasic: [AUSKLAPPEN]
Graphics 400,300,0,6
SetBuffer BackBuffer()
Local timer=CreateTimer(30)


Local DotX#,DotY#
Local XSpeed#,YSpeed#

Const GRAVITATION#=0.1,JUMPSPEED#=6 ;Konstanten zum einfachen ändern der Sprunggeschwindigkeit und gravitation

;Startpunkte
DotX=200
DotY=250


While Not KeyHit(1)
Cls

;--------
;Gravitation
YSpeed=YSpeed+GRAVITATION ;Um Gravition nach unten Bewegen
If DotY=>250 Then YSpeed=0 ; Wenn der Boden berührt wird keine Grav mehr

;Absprung
If KeyHit(57) And YSpeed=0 Then YSpeed=-JUMPSPEED ; Druck der Leertaste setzt die Geschwindigkeit auf max Sprunggeschwindigkeit

;Bewegung
DotY=DotY+YSpeed ; YSpeed wird immer zur aktuellen Postion addiert
;--------

;Links Rechts Bewegung
XSpeed=XSpeed+(KeyDown(205)-KeyDown(203))*0.1
DotX=DotX+XSpeed

Text 1,1,"Dot: "+DotX+" | "+DotY
Text 1,25,"Speed: "+XSpeed+" | "+YSpeed
Oval DotX,DotY,5,5,1

WaitTimer timer
Flip 0
Wend
End


Die Funktion kannst du den Kommentaren entnehmen und mit ein wenig Grips anstrengen kriegst du das sicherlich auch in eine vernünftige Sprungfunktion Very Happy

mfg,
count-doku
 

PCfreak

BeitragDi, Jun 28, 2011 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm okay ... ich versuchs mal in meinem code einzubauen ...

Danke Confused
Kentnisse: QB, BB, HTML,

BladeRunner

Moderator

BeitragDi, Jun 28, 2011 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
PCfreak hat Folgendes geschrieben:
Ich kann Programmieren -.-

es ist nicht so dass ich NICHTS hinbekomme ......

Ich bin kein Kleines Kind, was wirklich alles erfragt ...
die meisten Fehler bemerke ichs elbst !

Aber diese Sprung sequenz ... die kann ich halt nicht ...
sorry aber du ahst auch mal klein angefangen Mad

EDIT ::

Ich brauche einfach nur Hoch - Runter ...
Die kurve entsteht ja dabei, wenn man nach licks/rechts geht ....
dazu müsste man die Sprung-sequenz aber so hinbiegen, dass man erst schnell springt, dann langsamer wird, und so auch wieder runter fällt ...
verstanden oder zu undeutlich ? Very Happy


Ich habe ja nirgends behauptet Du könntest nichts, also kein Grund Dich angegriffen zu fühlen.
ABER: Wir sind hier ein programmiersprachenbezogenes Board, also wird im Stillen erwartet dass Leute selbstständig Lösungen erarbeiten. Fertige Lösungen sind Auftragsarbeit und kosten, ganz einfach. Tipps gibt es umsonst, und wenn Du geholfen haben willst wäre es sinnig deinen fehlerhaften Code einzustellen.
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
 

PCfreak

BeitragDi, Jun 28, 2011 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah okay ...
Ich wusste nicht das Coden hier bezahlt werden muss Smile
Aber schwamm drüber ... war nur ein bisschen gereizt ...

Mein Code sieht jetzt folgendermaßen aus, und klappt bis auf ein Problem ganz toll:

BlitzBasic: [AUSKLAPPEN]

Const gravitation#=1,jumpspeed#=20


Repeat
Cls

DrawImage player,plx,ply
DrawImage lvl1,0,0

yspeed=yspeed+gravitation#
While ImagesCollide(player,plx,ply,0,lvl1,0,0,0)
yspeed=0
ply=ply-gravitation#
Wend

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

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

Flip
Until KeyDown(1)
End


Problem:

Die Figur springt nur manchmal Confused
Ich weiß leider nicht woran das liegt, weil "yspeed" ja durch die mehrmalige Kollision mit dem Boden keinesfalls geändert wird Confused
Kentnisse: QB, BB, HTML,

BladeRunner

Moderator

BeitragDi, Jun 28, 2011 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ich wusste nicht das Coden hier bezahlt werden muss

Wie erwähnt- helfen kostet nichts, denn dann sieht man ja das Eigeninitiative da ist. Aber "kann mir wer einen Code schreiben" hat einen etwas faden Beigseschmack, und in der frien Wirtschaft würdest Du dafür einen Auftrag erteilen und jemand bezahlen müssen. Böse, aber so läuft die Welt.
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
 

PCfreak

BeitragDi, Jun 28, 2011 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Zitat:
Ich wusste nicht das Coden hier bezahlt werden muss

Wie erwähnt- helfen kostet nichts, denn dann sieht man ja das Eigeninitiative da ist. Aber "kann mir wer einen Code schreiben" hat einen etwas faden Beigseschmack, und in der frien Wirtschaft würdest Du dafür einen Auftrag erteilen und jemand bezahlen müssen. Böse, aber so läuft die Welt.


Ja =D
Nur ich habe den Code vorher gelöscht und wollte ihn dann noch im nachhinein einfügen ...
Hätte ich andersrum amchen sollen Smile
Kentnisse: QB, BB, HTML,

count-doku

BeitragDi, Jun 28, 2011 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich ist alles richtig, nur in der While ImagesCollide Schleife muss
kein ply=ply-gravitation hin und hinter der If Bedingung kommt nur SpeedY=-Jumpspeed

Dann müsste es gehen.

BlitzBasic: [AUSKLAPPEN]
Const gravitation#=1,jumpspeed#=20
Repeat
Cls

DrawImage player,plx,ply
DrawImage lvl1,0,0

yspeed=yspeed+gravitation#
While ImagesCollide(player,plx,ply,0,lvl1,0,0,0)
yspeed=0
;ply=ply-gravitation# Fällt weg
Wend

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

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

Flip
Until KeyDown(1)
End


Du solltest außerdem (sofern du es nicht schon weiter oben gemacht hast) die Variablen plx,ply,yspeed als Float ( Zeichen # ) machen, um eine weiche bewegung zu ermöglichen.

lg,
count-doku
 

PCfreak

BeitragDi, Jun 28, 2011 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm ... irgendwie hängt sich das Programm auf,
wenn ich die Markierte stelle im Code lösche Confused

BlitzBasic: [AUSKLAPPEN]

;####################################################
;#
Graphics 1366,768,0,1 ;#
SetBuffer BackBuffer() ;#

lvl1 = LoadImage("hindernis1.bmp")
player = LoadImage("player1.bmp")

MaskImage lvl1,255,255,255
MaskImage player,255,255,255

lvlx=0
plx=100
ply=400
Const gravitation#=1,jumpspeed#=20


Repeat
Cls

DrawImage player,plx,ply
DrawImage lvl1,0,0

yspeed=yspeed+gravitation#
While ImagesCollide(player,plx,ply,0,lvl1,0,0,0)
yspeed=0
ply=ply-gravitation# ; Sobald ich dies entferne, Hängt sich ads Programm auf !
Wend

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

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

Flip ;#
Until KeyDown(1) ;#
End ;#
;###################################################


PS.:
Danke für den Tipp
Kentnisse: QB, BB, HTML,

Xeres

Moderator

BeitragDi, Jun 28, 2011 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Vermutlich induzierst du deine Endlosschleife, da sich ply ja nicht mehr ändert...
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

BeitragDi, Jun 28, 2011 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann sein ....

Ich habe aber bemerkt, dass wenn ich in der abfrage, ob die Leertaste gedrückjt wird, das
BlitzBasic: [AUSKLAPPEN]

And yspeed=0

entferne, dass es dann reibungslos läuft ?!?!?!?!?!

Aber dann kann man endlos in der luft einen 2. Jump hinlegen .....

Was tun ?
Kentnisse: QB, BB, HTML,

Ana

BeitragDi, Jun 28, 2011 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
du könntest dir es wie folgt überlegen:

1.du unterteilst dein Level in gleich große Bereiche
2.Für jeden Bereich legst du einen Punkt fest wo der Boden ist, oder halt gar keiner
3.Du fügst es in der Srpungfunktion ein, das die Figur auf dem Punkt ihres Feldes sein muss damit sie überhaupt springt.

realisieren kannst du das

1. Bereichwidth = Levelwidth / Bereichsanzahl

2. Mit einem Dim Feld

3. If feld(figurX/Bereichsanzahl) = FigurY then ...
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group