Probleme mit dem Schläger bei Ping Pong

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

bruce185

Betreff: Probleme mit dem Schläger bei Ping Pong

BeitragMo, Aug 15, 2005 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
also, ich habe probleme mit dem Schläger bei Ping Pong, und zwar bewege ich den Schläger mit der Maus, und ich möchte das der schläger bei 100 pixel stopt und bei 600 pixel stopt, ich weiss nur wie das mit der Tastatur funktioniert, aber mit der maus ist das ein bisschen anders, so bewege ich den Schläger:

Code: [AUSKLAPPEN]

DrawImage schlaeger,MouseX(),640


so habe ich das gemacht dass es bei 600 pixel stopt:

Code: [AUSKLAPPEN]

If MouseX() > 600 Then
  MoveMouse 600,640
 EndIf


aber wenn ich den Maus schnell nach rechts bewege, dann überschreitet der schläger über 600 pixel, wie kann ich dass jetzt so machen dass es direct stopt bei 600 pixel, und bei 100 pixel, für jede hilfe bin ich euch sehr dankbar Wink

bruce185

Justus

BeitragMo, Aug 15, 2005 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Problem ist mir zwar neu, aber ich könnte mir denken, dass MoveMouse() dazu etwas zu träge ist.

Mach es anders, indem du nicht die Maus zurückversetzt, sondern das Bild einfach bei 600 belässt, bis die Maus wieder "im Rahmen" ist.

Code: [AUSKLAPPEN]

If Mousex() > 600 then
 DrawImage schlaeger,600,640
endif

bruce185

BeitragMo, Aug 15, 2005 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank für deine antwort, aber das geht so nicht, wenn ich dass jetzt so schreibe:

Code: [AUSKLAPPEN]

If MouseX() > 600 Then
 Drawimage schlaeger,600,640
EndIf


der schläger stopt dann, aber dann wird ein neuer schläger eingezeichnet,
und der neue schläger überschreitet dann die 600 pixel, gibt es vieleicht noch eine andere möglichkeit, ich danke dir schonmal Wink

bruce185

Justus

BeitragMo, Aug 15, 2005 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst den Rest natürlich auch noch anpassen - hier in einfacher Form:

Code: [AUSKLAPPEN]

If mousex() < 600 then drawImage schlaeger,mousex(),640
If MouseX() > 600 Then Drawimage schlaeger,600,640

Alfadur

BeitragMo, Aug 15, 2005 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
wie wärs wenn du ein x für den schläger definierst und dann einfach

if x<=mousex() then x=x-1
else x=x+1

dann kannste einfach if x<100 then x=100 / if x>600 then x=600

machen.

ps: wolltest du nich tetris machen? warum konzentrierst du dich nichmal auf eins. ich glaub du hast schon 1000 sachen angefangen und nix beendet...
A Cray is the only computer that runs an endless loop in less than four hours.

bruce185

BeitragMo, Aug 15, 2005 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, das wollte ich, aber ich weiss nicht einmal wie man ein Grundgerüst für ein Tetris Spiel aufbaut, die Tutorials die ihr mir für Tetris angeboten habt, verstehe ich nicht so gut, weil es so wenig komentiert ist, gibt es vieleicht noch andere tutorials wie man ein Tetris Spiel schreiben kann, da wo es schritt für schritt erklärt wird, ich bin euch sehr dankbar für die weitere hilfen Wink

bruce185
 

gamble

BeitragDi, Aug 16, 2005 0:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Und dann noch Schritt für Schritt zum EgoShooter? Sorry, aber ein bisschen selbst-denken wird ja wohl drin sein.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Aug 16, 2005 4:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo bruce185, ich kann gamble zwar nur zustimmen. Aber wenn du unbedingt möchtest, hier mal ein Beispielcode wie mans machen könnte...
Code: [AUSKLAPPEN]
Graphics 640,480,32,1
SetBuffer BackBuffer()

x%=0


While Not KeyHit(1)
 x=x+MouseXSpeed()   ;MouseXSpeed damit der Schläger nicht 'virtuell' ausserhalb des Bildschirmes kann
 MoveMouse 320,240   ;Maus zur Bildschirmmitte damit der Schläger immer mit 'voller' Geschwindigkeit bewegt werden kann
 If x<100 Then x=100   ;Schlägerbewegungsbegrenzung
 If x>440 Then x=440   ;Schlägerbewegungsbegrenzung
 Rect x,470,100,10,1
 Flip
 Cls
Wend
End

bruce185

BeitragDi, Aug 16, 2005 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
cool, es funktioniert, vielen dank, da hab ich wieder was neues von euch gelernt Very Happy

bruce185

bruce185

BeitragDi, Aug 16, 2005 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
noch eine bitte hätte ich an euch, und zwar ist mein schlaeger ein bisschen rund, und ich möchte es so berechnen wenn der Ball den schlaeger weiter links berührt, dann möchte ich dass der Ball anders regiert, z.B. der Ball kommt von links und der Ball berührt den Schlaeger an der linke ecke, dann möchte ich dass der ball wieder nach links fliegt, und wenn der ball die rechte ecke des schlaegers berührt, dann möchte ich dass der ball nach rechts fliegt, und wenn der ball in der mitte des schlägers berührt, dann möchte ich dass der ball gerade hoch fliegt u.s.w.
wisst ihr wie man das berechnet, für jede hilfe bin ich euch sehr dankbar, danke schonmal Wink

bruce185

Ctuchik

BeitragMi, Aug 17, 2005 1:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Das solltest du leicht selbst herausfinden können.
Du hast die Koordinaten des Schlägers und des Balles bei der Kollision und kennst die Breite von ihnen.
Jetzt nimm ein Blatt Papier, mach dir ne Skizze und denk ein bissl drüber nach.
Ist wirklich nicht schwer!

MfG Ctuchik
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Aug 17, 2005 2:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Bruce, ich könnte dir auch hier ein Beispielcode zuschicken. Ist echt nicht schwer! Aber ich kann dir denoch ein paar tips dazu geben.

Nimm dir ein Beispiel von Ctuchik und benutze Papier und Bleistift dazu. Mit Atan2 kannst du ganz einfach den Winkel aus X- und Y- Geschwindigkeit berechnen. Wenn Ball auf Schläger trifft benutzt du Atan2 und die Aufschlagsposition des Balles auf Schläger und rechnest dann den neuen Abprallwinkel aus.

Wenn du es nicht selber machst, lernst du es nicht...

Ctuchik

BeitragMi, Aug 17, 2005 3:17
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie er es wollte braucht er kein Atan2, sondern muss nur wissen wie weit vom Mittelpunkt des Schlägers entfernt der Ball aufgetroffen ist!
Aber jetzt lass ihn erstma versucehn!
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

bruce185

BeitragMi, Aug 17, 2005 9:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, ich danke euch für die tips, ich werde es mal versuchen, wenn ich es hinbekommen habe, dann poste ich es hier im forum, nur kucken ob ich es richtig gemacht habe, danke nochmals Very Happy

bruce185

bruce185

BeitragMi, Aug 17, 2005 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
ich gebs auf, keine ahnung wie man das in Blitz Basic macht.
1. Weiss ich nicht wie man das berechnet.
2. Wenn ich das berechnet habe, dann weiss ich nicht wie man das in Blitz Basic hin schreiben soll.

was ich fragen wollte! wie habt ihr das gelernt, also ich komme einfach ohne eure hilfe nicht weiter, bitte helft mir, ich danke euch schonmal für die Hilfe Wink

bruce185

Ctuchik

BeitragMi, Aug 17, 2005 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Na gut, ich gehe mal von einer ganz simplen Kollision aus.
Du hast die x und y Position des balls (linke obere ecke)
und seine x- und y-Geschwindigkeit.
Sowie die Koordinaten des Schlägers (auch linke obere Ecke).
Und natürlich Breite von Ball und Schläger!

Jetzt bemerkt das programm dass der Ball mit dem Schläger kollidiert ist.
Die y-Geschwindigkeit wird umgedreht damit der Ball wieder vom Schläger wegfliegt.
Jetzt fehlt noch die x-Geschwindigkeit.
Wenn der Ball in der Mitte des Schlägers aufgetroffen ist soll er gerade nach oben fliegen (xspeed = 0), je weiter links er aufprallt umso stärker fliegt er nach links weg (xspeed < 0), ebenso rechts (xspeed > 0)

Dazu kann man nun einfach den Abstand des Mittelpunkts des Balls (ball_x + ball_breite/2 ) und des Mittelpunkts des Schlägers (schläger_x + schläger_breite/2) betrachten.
Also:
Code: [AUSKLAPPEN]
abstand = (ball_x + ball_breite/2) - (schläger_x + schläger_breite/2)

Ist der Ball rechts vom Mittelpunkt des Schlägers aufgetroffen kommt für abstand ein positiver Wert heraus, links davon ein negativer Wert und hat er genau den Mittelpunkt getroffen so kommt 0 heraus.
Damit haben wir schon einen Wert, wie wir ihn oben gesucht haben.
Man könnte also einfach machen:
Code: [AUSKLAPPEN]
if (KOLLISION) then
  ball_yspeed = -ball_yspeed
  ball_xspeed = (ball_x + ball_breite/2) - (schläger_x + schläger_breite/2)
end if


Da die stärke der Ablenkung dann aber auch von der Schlägerbreite abhängig ist empfiehlt es sich den Wert noch durch die Schlägerbreite zu teilen und mal einer konstanten zu nehmen.
Code: [AUSKLAPPEN]

ball_xspeed = (((ball_x + ball_breite/2) - (schläger_x + schläger_breite/2)) / schläger_breite) * X_ABPRALL_STAERKE

Mit X_ABPRALL_STAERKE kannst du dann experimentieren bis du einen Wert hast bei dem es gut aussieht.

Ich hoffe ich konnte dir weiterhelfen.

MfG Ctuchik
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group