Hi, Leute!
Ich suche schon seit einigen, vielen Stunden nach einem Tutorial/Example oder was auch immer, um in PyGame ein Objekt springen zu lassen.
Habt ihr vllt. eine Idee, wie man das machen kann, oder kennt ihr ein gutes Tutorial oder sonst irgendwas?
Danke schonmal
~DarX
[PyGame] Gravitation & Springen
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Am besten siehst du dir einfach mal den Sourcecode von einem Pong Clone an. Das Spiel besteht ja aus nicht viel anderem
Falls du nichts finden solltest habe ich selbst noch so einen Pong-Klon mit Pygame geschrieben. Der ist jedoch ziemlich hässlich
Falls du nichts finden solltest habe ich selbst noch so einen Pong-Klon mit Pygame geschrieben. Der ist jedoch ziemlich hässlich
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
@DarXun: Was genau soll das denn werden? Am einfachsten ist es für der Y-Koordinate über die Zeit die Werte der ersten Hälfte einer Sinusschwingung zu geben. Das ist natürlich keine physikalisch korrekte Simulation, aber rein optisch hat das schon in vielen Spielen und Demos ausgereicht.
Dann sollte ich mir wohl dringend mal Sinus, Cosinus und Tangens anschauen?
Bin erst im 2. Halbjahr der 10. Klasse am Gymnasium... Bisher hatten wir noch kein Sinus & Co.
Weiß nur in etwa wie der Funktionsgraph( oda whatever) aussieht.
Edit:
Wollte einfach mal ein Character springen lassen...
Wir fangen in der Schule im Informatikunterricht bald mit Projekten in kleinen Gruppen an.
Wir haben zwar bisher nicht einmal Schleifen durchgenommen, aber ich schau mir das alles selbst an, weil ich mich wirklich sehr für sowas interessiere.
Als Projekt hatte ich mir dann was relativ simples vorgestellt.
'ne Kleine Jump & Run - Engine.
Wie gesagt... nix großartiges für EUREN Standard, aber bestimmt 'ne 1 für den Infokurs-Standard.
Bin erst im 2. Halbjahr der 10. Klasse am Gymnasium... Bisher hatten wir noch kein Sinus & Co.
Weiß nur in etwa wie der Funktionsgraph( oda whatever) aussieht.
Edit:
Wollte einfach mal ein Character springen lassen...
Wir fangen in der Schule im Informatikunterricht bald mit Projekten in kleinen Gruppen an.
Wir haben zwar bisher nicht einmal Schleifen durchgenommen, aber ich schau mir das alles selbst an, weil ich mich wirklich sehr für sowas interessiere.
Als Projekt hatte ich mir dann was relativ simples vorgestellt.
'ne Kleine Jump & Run - Engine.
Wie gesagt... nix großartiges für EUREN Standard, aber bestimmt 'ne 1 für den Infokurs-Standard.
Hier mal ein ganz simples Stück Quelltext, das die Bewegung zumindest erahnen lässt. Das "hüpfen" ist "seitwärts", also am besten den Kopf oder den Monitor entsprechend drehen.
Code: Alles auswählen
import sys
import time
from math import pi, sin
def main():
steps = 50
amplitude = 70
while True:
for i in xrange(steps):
x = int(amplitude * sin(pi / steps * i))
sys.stdout.write('%s* %s\n' % (' ' * x, x))
sys.stdout.flush()
time.sleep(0.1)
Hab den Monitor gedreht...
Danke... ist schonmal recht gut...
Werd' das wohl erstmal benutzen, bis ich was physikalisch richtiges gefunden hab.
Hab schon in einigen Sourcecodes von Spielen nachgeschaut, ist aber ziemlich schwer, wenn die Leute so wenig Kommentare einbringen... Und naja, 10.000 Klassen anschauen ist auch so'ne Sache >_<
Danke... ist schonmal recht gut...
Werd' das wohl erstmal benutzen, bis ich was physikalisch richtiges gefunden hab.
Hab schon in einigen Sourcecodes von Spielen nachgeschaut, ist aber ziemlich schwer, wenn die Leute so wenig Kommentare einbringen... Und naja, 10.000 Klassen anschauen ist auch so'ne Sache >_<
Ähm, du hast doch in den Titel geschrieben, dass du Pygame benutzen willst, also kannst du doch ganz bequem pygame.surface.move(x, y) nutzen. Da brauchst du keinen Sinus. Pygame kann ein Objekt auch zwei bewegungen gleichzeitig ausführen lassen. So dass du sehr bequem eine ähnliche steuerung wie in den guten mario Spielen hinkriegen dürftest.
@Imperator: DarXun möchte eine typische Hüpfbewegung und da müssen über die Zeit irgendwoher Y-Kooridinaten kommen, die so aussehen als wenn die Aufwärtsbewegung erst schnell ist, dann langsamer wird, umkippt, und nach unten wieder schneller wird. Das ist nunmal am einfachsten mit einer "halben" Sinuskurve darstellbar.
Okay, es geht noch einfacher indem man einfach 'ne Zeitlang gleichmässig nach oben geht und dann wieder gleichmässig nach unten, aber da DarXun "Gravitation" im Titel geschrieben hat, dachte ich *das* wäre zu simpel und unansehnlich.
Okay, es geht noch einfacher indem man einfach 'ne Zeitlang gleichmässig nach oben geht und dann wieder gleichmässig nach unten, aber da DarXun "Gravitation" im Titel geschrieben hat, dachte ich *das* wäre zu simpel und unansehnlich.
Achso, dann kann ich als 8. Klässler wohl kaum weiterhelfen.
Trotzdem viel Glück DarXun!
Trotzdem viel Glück DarXun!
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Darin wird das grösste Problem dabei gelöst, die Kollisionserkennung. Danach musst du dich noch um die Impulserhaltung kümmern. Ich versuche mal ein Beispiel zu machen:DarXun hat geschrieben:Aber seit wann hat Pong was mit Springen zu tun? :S
Code: Alles auswählen
import time
class Body:
def __init__(self, x, y, vx, vy):
# position
self.x = x
self.y = y
# velocity
self.vx = vx
self.vy = vy
# we leave out the acceleration for simplicity
box_width = 400
box_height = 300
gravity = 9.81
# 0.8 is the amount of energy that is reflected
bounciness = -0.8
body = Body(10, 10, 10, 10)
while True:
# obey gravity its the law!
body.vy += 9.81
body.x += body.vx
body.y += body.vy
# collision detection
if body.x < 0:
body.x *= -1
body.vx *= bounciness
elif body.x > box_width:
body.x = box_width - (body.x % box_width)
body.vx *= bounciness
if body.y < 0:
body.y *= -1
body.vy *= bounciness
elif body.y > box_height:
body.y = box_height - (body.y % box_height)
body.vy *= bounciness
print body.x, body.y
time.sleep(1)
Wenn nicht hat Pyglet ein Beispiel dazu:
http://pyglet.googlecode.com/svn/trunk/ ... y/noisy.py
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Müsste wohl funktionieren. Hier ist der Output:
20 29.81
30 59.43
40 98.86
50 148.1
60 207.15
70 276.01
80 245.32
90 192.194
100 148.878
110 115.372
120 91.676
130 77.79
140 73.714
150 79.448
20 29.81
30 59.43
40 98.86
50 148.1
60 207.15
70 276.01
80 245.32
90 192.194
100 148.878
110 115.372
120 91.676
130 77.79
140 73.714
150 79.448