Seite 1 von 1
Event-Häufung
Verfasst: Donnerstag 1. September 2011, 16:13
von Neo_Junior
hi,
es kann sein, dass es so eine frage schon gibt, aber ich wüsste nicht was dafür ein geeignetes stichwort wäre:
ich habe eine art pong für multiplayer (links und rechts je einer) und mit hoch und runter und w und s kann man seinen schläger steuern.
ich habe außerdem für das gedrückthalten (und dadurch schneller bewegen) dieses stück code verwendet:
Code: Alles auswählen
delay = 100
interval = 50
pygame.key.set_repeat(delay, interval)
das problem ist, dass wenn ein spieler die taste gedrückt hält und der andere auch nur ein mal seine taste drückt, wird das schnelle hoch- und runterfahren unterbrochen...was ja eigentlich nicht so sein sollte...
bitte um hilfe
danke

Re: Event-Häufung
Verfasst: Donnerstag 1. September 2011, 20:48
von deets
So macht man das nicht. Im Gegenteil, das repeat stoert nur.
Du bekommst von pygame key-pressed & key-released events. Und genau auf die musst du hoeren. Wenn der spieler "w" drueckt, faengst du an, so lange nach oben zu gehen, bis "w" losgelassen wird. Obacht geben, wenn "s" gedrueckt wird, aber "w" noch nicht losgelassen wurde: dann musst du natuerlich trotzdem so tun, als ob "w" losgelassen wurde.
Analog natuerlich fuer die Pfeiltasten.
Re: Event-Häufung
Verfasst: Freitag 2. September 2011, 20:43
von Neo_Junior
cooooooooolioo
das stück code stammte aus dem buch "Hello World", aber für ein single player pong...
kannst du pls ma den code für deine events oder eben deren erkennung reinschreiben?
thx
Re: Event-Häufung
Verfasst: Samstag 3. September 2011, 00:12
von deets
Noeeeeeeeee, kann ich nicht, denn ich bin nicht dazu daaaaaaaa, dir mal eben so zu dein Arbeit zu machen. Sondern dir zu Hinweise zu geben, wie du das gaaaaaanz selbst loesen kannst. Sonst hast du doch gar keinen Spass daran. Und ich auch nicht...
Re: Event-Häufung
Verfasst: Sonntag 4. September 2011, 20:52
von Neo_Junior
so,
ich glaube, ich habe das problem nicht ausreichend beleuchtet deswegen erstmal hier der code, er ist noch nicht fertig, denn ich möchte erst die events hinbekommen
Code: Alles auswählen
# -*- coding: iso-8859-1 -*-
import pygame,sys
from pygame.locals import *
class BallKlasse(pygame.sprite.Sprite):
def __init__(self,bild,geschwindigkeit,ort):
pygame.sprite.Sprite.__init__(self)
self.image=pygame.image.load(bild)
self.rect=self.image.get_rect()
self.rect.left,self.rect.top=ort
self.geschwindigkeit=geschwindigkeit
def bewegen(self):
global rechts
self.rect = self.rect.move(self.geschwindigkeit)
if self.rect.left<0:
rechts+=rechts
self.geschwindigkeit[0]=-self.geschwindigkeit[0]
if self.rect.right > 800:
global links
links+=links
self.geschwindigkeit[0]=-self.geschwindigkeit[0]
if self.rect.top<=0:
self.geschwindigkeit[1]=-self.geschwindigkeit[1]
if self.rect.bottom>600:
self.geschwindigkeit[1]=-self.geschwindigkeit[1]
class SchlaegerKlasse(pygame.sprite.Sprite):
def __init__(self,ort=[0,0]):
pygame.sprite.Sprite.__init__(self)
image_surface = pygame.surface.Surface([5, 100],1)
image_surface.fill([20,30,120])
self.image = image_surface.convert()
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = ort
pygame.init()
delay=50
interval=5
pygame.key.set_repeat(delay,interval)
screen=pygame.display.set_mode([800,600],1)
uhr=pygame.time.Clock()
ball_geschwindigkeit=[7.5,7.5]
ball=BallKlasse('G1-Kugel.png',ball_geschwindigkeit, [50, 50])
ballGruppe=pygame.sprite.Group(ball)
schlaeger1=SchlaegerKlasse([750,300])
schlaeger2=SchlaegerKlasse([50,300])
links=0
rechts=0
while 1:
uhr.tick(40)
pygame.display.set_caption("Multipong v1.1")
screen.fill([255,255,255])
for ereignis in pygame.event.get():
if ereignis.type == QUIT:
sys.exit()
elif ereignis.type == KEYDOWN:
if ereignis.key == K_DOWN:
schlaeger1.rect.top=schlaeger1.rect.top+5
elif ereignis.key == K_UP:
schlaeger1.rect.top=schlaeger1.rect.top-5
elif ereignis.key == K_s:
schlaeger2.rect.top=schlaeger2.rect.top+5
elif ereignis.key == K_w:
schlaeger2.rect.top=schlaeger2.rect.top-5
if pygame.sprite.spritecollide(schlaeger1, ballGruppe, False):
ball.geschwindigkeit[0] = -ball.geschwindigkeit[0]
if pygame.sprite.spritecollide(schlaeger2, ballGruppe, False):
ball.geschwindigkeit[0] = -ball.geschwindigkeit[0]
ball.bewegen()
screen.blit(ball.image, ball.rect)
screen.blit(schlaeger1.image, schlaeger1.rect)
screen.blit(schlaeger2.image, schlaeger2.rect)
pygame.display.flip()
in zeile 62 geht die event-schleife los.
ich glaube, das problem ist, dass ereignis immer nur mit einem wert also einem event belegen kann
so ich bitte dich und alle anderen, die mir helfen können, eine möglichst einfache, verständliche und wirkungsvolle lösung abzugeben, denn wenn du nur eine zeile schreibst, die mir nichts nützt, weil ich sie nicht verstehe, dann ist das doch eher sinnlos und ich traue dir ma zu, einen so sprechenden code-schnipsel zu liefern, dass ich ihn verstehe
-danke
Re: Event-Häufung
Verfasst: Dienstag 6. September 2011, 19:31
von Neo_Junior
ey kommt schon helft mir pls ma alle
PS: was hat der moderator gemacht?
Re: Event-Häufung
Verfasst: Dienstag 6. September 2011, 19:51
von Hyperion
Neo_Junior hat geschrieben:ey kommt schon helft mir pls ma alle
Dann formuliere doch mal Deine Frage anschaulich! ggf. mit einem kleinen Bild oder einer ASCII Zeichnung, die verdeutlicht, was Du erreichen willst.
Neo_Junior hat geschrieben:
PS: was hat der oderator gemacht?
Ich erkläre es Dir:
Quelltext in Python-Code-Tags gesetzt.

Re: Event-Häufung
Verfasst: Mittwoch 7. September 2011, 14:14
von Neo_Junior
es ist eigentlich ganz einfach:
in der event-schleife sieht man, dass sich nach dem druck auf w,s,oben,unten die schläger 5 pixel nach oben oder unten bewegen
so.
Code: Alles auswählen
pygame.init()
delay=50
interval=5
pygame.key.set_repeat(delay,interval)
screen=pygame.display.set_mode([800,600],1)
uhr=pygame.time.Clock()
ball_geschwindigkeit=[7.5,7.5]
ball=BallKlasse('G1-Kugel.png',ball_geschwindigkeit, [50, 50])
ballGruppe=pygame.sprite.Group(ball)
schlaeger1=SchlaegerKlasse([750,300])
schlaeger2=SchlaegerKlasse([50,300])
hier ist das mit
delay=50
interval=5
pygame.key.set_repeat(delay,interval)
so und wenn nun eine der oben genannten tasten 50 milisekunden gedrückt gehalten wird, bewegen sich die schläger aller 5 millisekunden 5 pixel in die jeweilige richtung.
und wenn nun ein spieler eine taste gedrückt hält, und der andere gleich danach auch eine seiner tasten, dann stoppt der schläger des spielers, der seine taste als erstes gedrückt gehalten hatte, ich denke das liegt daran, dass in der event schleife immer nur ein event vorgesehen ist
und meine frage ist, wie man das beheben kann.
PS: das mit dem moderator hab ich selbst gelesen ich hab das nur nicht verstanden....
PS 2: ein 2. problem ist mir übrigens auch aufgefallen: wenn die ober-oder unterseite eines schlägers mit dem ball kollidiert, geht der ball in den schläger hinein, was kann man denn hier tun???
Re: Event-Häufung
Verfasst: Mittwoch 14. September 2011, 15:27
von Neo_Junior
BITTEEE helft mir!!!!!!
Re: Event-Häufung
Verfasst: Mittwoch 14. September 2011, 15:39
von /me
Neo_Junior hat geschrieben:BITTEEE helft mir!!!!!!
deets hat doch alles Passende geschrieben. Ich zitiere noch mal:
"Du bekommst von pygame key-pressed & key-released events. Und genau auf die musst du hoeren. Wenn der spieler "w" drueckt, faengst du an, so lange nach oben zu gehen, bis "w" losgelassen wird. Obacht geben, wenn "s" gedrueckt wird, aber "w" noch nicht losgelassen wurde: dann musst du natuerlich trotzdem so tun, als ob "w" losgelassen wurde.
Analog natuerlich fuer die Pfeiltasten."
Vielleicht mal etwas klarer: Du solltest die Bewegung nicht im Keydown-Event durchführen, sondern dir dort nur für jeden Spieler individuell merken, welche Taste er gedrückt hat.
Re: Event-Häufung
Verfasst: Montag 3. Oktober 2011, 20:34
von Neo_Junior
DAS hab ich verstanden danke habs schon ausprobiert und da ist eine Sache die mir einfach nicht in den mund passt:
Code: Alles auswählen
x=0
f=0
import pygame,sys
screen=pygame.display.set_mode([800,600],1)
while 1:
if x==f:
print 1
for ereignis in pygame.event.get():
if ereignis.type==pygame.KEYDOWN:
if ereignis.key==pygame.K_f:
x=f
print 1
if ereignis.type == pygame.QUIT:
sys.exit()
so das ist mein test code wie genau schreibt man denn key-pressed oder key-released?
alles groß? und auch wohin besonders toll wäre es, wenn du meinen code entsprechend ergänzen würdest, denn sprechender code ist einfach leichter zu verstehen als erklärungen
und ich weis, dass es schwer ist, mir das alles mundgerecht zu machen aber ich bin 14 und kein profi nur eben mit dem allerbesten Willen einer zu werden

)
also danke schonmal...
Re: Event-Häufung
Verfasst: Montag 3. Oktober 2011, 21:45
von BlackJack
@Neo_Junior: „key-pressed” oder „ley-released” schreibst Du gar nirgends hin. Das ist eine natürlichsprachliche Beschreibung der Ereignisse. Die Konstanten in Pygame heissen `pygame.KEYDOWN` und `pygame.KEYUP`.
Re: Event-Häufung
Verfasst: Dienstag 4. Oktober 2011, 00:02
von deets
@Neo_Junior
Tut mir leid, aber dein permanentes insistieren, laeuffaehigen Code zu bekommen ist hart an der Grenze (wenn nicht drueber) zur Unverschaemtheit. Du zeigst nicht, das du dich systematisch mit der Programmierung beschaeftigst, sondern einfach immer nur cargo-cultige Versatzstuecke aus irgendwelchen Tutorien oder aehnlichem - in der Hoffnung, wir schreiben dir den Rest dazu.
Und da muss ich dich enttaeuschen: selbst wenn dir hier der beschriebene Code frei Haus geliefert wird - es wird immer nur Stueckwerk sein, und dein Traum vom grossen Spiel wird sich so nicht erfuellen. Du musst da schon selbst ran, und es wirklich *lernen*.
Re: Event-Häufung
Verfasst: Dienstag 4. Oktober 2011, 19:17
von Neo_Junior
ok dazu sag ich ma nur eins:
BlackJack hat geschrieben:@Neo_Junior: „key-pressed” oder „ley-released” schreibst Du gar nirgends hin. Das ist eine natürlichsprachliche Beschreibung der Ereignisse. Die Konstanten in Pygame heissen `pygame.KEYDOWN` und `pygame.KEYUP`.
DAS war hilfreich danke
deets hat geschrieben:@Neo_Junior
Tut mir leid, aber dein permanentes insistieren, laeuffaehigen Code zu bekommen ist hart an der Grenze (wenn nicht drueber) zur Unverschaemtheit. Du zeigst nicht, das du dich systematisch mit der Programmierung beschaeftigst, sondern einfach immer nur cargo-cultige Versatzstuecke aus irgendwelchen Tutorien oder aehnlichem - in der Hoffnung, wir schreiben dir den Rest dazu.
Und da muss ich dich enttaeuschen: selbst wenn dir hier der beschriebene Code frei Haus geliefert wird - es wird immer nur Stueckwerk sein, und dein Traum vom grossen Spiel wird sich so nicht erfuellen. Du musst da schon selbst ran, und es wirklich *lernen*.
DAS war momentan für mich überhaupt nicht hilfreich, außer ich hätte gewollt, dass mich jemand in meiner Motivation bremst ich möchte mich echt nicht aggressiv dagegen äußer vielleicht stimmt das ja und ich merks einfach nicht aber wo her soll ich das wissen ich meine meine ausrüstung ist das Buch "Hello World" und ein haufen englischsprachiger torturials irgendwo muss information herkommen und aus diesem grund frage ich und wenn du mir sagst wie ich wenn ich mich jeden tag 2 stunden hinsetzte und das lerne oder eben programmiere so etwas lernen könnte würde ich das sofort machen
ich versuche dich zu verstehen ich glaube für dich ist das alles kinderkram und dudelei aber ich bin eben noch nicht weiter
bitte versuche auch mich zu verstehen als einen durchschnittlichen menschen mit einem IQ unter 140 und einer 2 in englisch
danke
Re: Event-Häufung
Verfasst: Dienstag 4. Oktober 2011, 19:52
von deets
@Neo_Junior
Ich habe schon in meiner ersten Antwort gesagt, worauf es ankommt. Das ich das mit englischen, umgangssprachlichen Begriffen getan habe, mag es fuer dich unnoetig schwieriger gemacht haben - aber das kann ich nicht ahnen, und das lies sich ja dann durch eine Nachfrage schnell klaeren.
Deine Antwort ist aber
kannst du pls ma den code für deine events oder eben deren erkennung reinschreiben?
Du hast also nicht versucht, deine Verstaendnisprobleme zu kommunizieren. Sondern code gefordert. Und das ist ja hier nicht der erste Thread, in dem das so geht.
Erst eine halbe Ewigkeit spaeter kommst du auf die Idee zu fragen, was denn mit (m)einer Antwort gemeint sein koennte. Und genau auf dieses Verhalten bezog sich meine vermeintlich nicht hilfreiche letzte Antwort.
Re: Event-Häufung
Verfasst: Mittwoch 5. Oktober 2011, 14:03
von Neo_Junior
ok ich merke, das wir uns "näherkommen" in dem sinne, dass wir immer weniger an einander vorbei reden.
ich will keinen code um etwas zu schaffen oder ein fertiges programm zu erhalten(spornt aber natürlich mehr an

), sondern um daraus zu lernendie frage nach dem code war also deshlab gestellt, weil ich dachte die rübergebrachten infos so besser materialisieren zu können.
es geht immer anders aber ok
ich bin hier fertig, denn der fehler ist behoben
UND ich weis wie und warum er aufgetreten ist (siehe neue signatur)
also als zusammenfassung:
Danke