Probleme mit dem Schläger bei Ping Pong
Übersicht

![]() |
bruce185Betreff: Probleme mit dem Schläger bei Ping Pong |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() bruce185 |
||
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() bruce185 |
||
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() bruce185 |
||
gamble |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und dann noch Schritt für Schritt zum EgoShooter? Sorry, aber ein bisschen selbst-denken wird ja wohl drin sein. | ||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
cool, es funktioniert, vielen dank, da hab ich wieder was neues von euch gelernt ![]() bruce185 |
||
![]() |
bruce185 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() bruce185 |
||
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() bruce185 |
||
![]() |
bruce185 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() bruce185 |
||
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group