Pong-Ball Berechnung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

wellensittich

Betreff: Pong-Ball Berechnung

BeitragMi, Jul 23, 2008 11:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi zusammen!
Also ich hab mir als erstes "eigenständiges" Spiel ein Pong spiel vorgenommen!
Im moment bin ich noch nicht so weit,bis jetzt habe ich nur den schläger, den man mit mousey()
bewegen kann, und ein ball image, der sich zurzeit nur mit erhöhung der x-koordinaten bewegt.

Nun möchte ich mit imagerectcollide, dass wenn das "Ball-Bild" den schläger berüht,
im richtigen winkel abbrallt (irgendwie mit cos und sin oder so ??? )
Also nehmts mir nicht übel, aber ich kanns noch nicht so richtig! xD

PS: Wie kann ich später den gegner programmieren, sodass man ihn auch besiegen kann?

MFG wellensittich

DAK

BeitragMi, Jul 23, 2008 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab das ohne sin/cos gemacht. Einfach dem Ball eine Y-Speed geben, die je nach dem, wo der Ball auf den Schläger trifft erhöht oder erniedrigt wird.

z.b. so: Code: [AUSKLAPPEN]

ballyspeed = ballyspeed+(bally-schlägery)/faktor

wobei du faktor natürlich anpassen musst...

Den Gegner lässt du einfach in Richtung der Y-Position des Balles fahren. Um in stärker/schwächer zu machen, einfach seine Geschwindigkeit erhöhen/erniedrigen.

Ich würd dir empfehlen, das ganze ohne imagescollide zu machen, da das recht langsam ist und nicht unbedingt benötgt wird...

Du kannst das ImagesCollide durch eine einfache Abfrage wie diese hier ersetzen: (die ist jetz nur für den linken Spieler)
Code: [AUSKLAPPEN]

If ballx<=schlägerbreite+ballradius Then
  If bally>=schlägery-schlägerhöhe/2 And bally>=schlägery+schlägerhöhe/2 Then
    ;was passieren soll, wenn der Ball auf den Schläger trifft.
  Else
    ;was passieren soll, wenn der Ball am Schläger vorbei fliegt.
  EndIf
EndIf
Gewinner der 6. und der 68. BlitzCodeCompo
 

wellensittich

BeitragMi, Jul 23, 2008 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
also erstmal danke für die antwort!

es hat mir aber ehrlichgesagt nich viel geholfen.
ich verstehe das einfach nich mit dem apprallen am schläger.
also ich habe 2 schläger. beide sind 100 pixel lang. dann hab ich noch eine kugel mit radius 15.

ok! wenn diese kugel nun in irgendeinem winkel auf den schläger trifft, wie kann ich diese dann im richtigen winkel abbrallen lassen???

und wie kann ich es machen, dass z.b. wenn die kugel den schläger etwas auserhalb von der mitte trifft, einen größeren ausfallswinkel bekommt??

falls sich jemand fragt "der ist ja sooooo blöd"(^^), ich programmiere noch nicht so lang, das ist mein erstes spiel und ich hatte cos und sin noch nicht in der schule^^
PS: SOMMERFERIEN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! xD !!!!

mfg wellensittich

FireballFlame

BeitragMi, Jul 23, 2008 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
wellensittich hat Folgendes geschrieben:
ok! wenn diese kugel nun in irgendeinem winkel auf den schläger trifft, wie kann ich diese dann im richtigen winkel abbrallen lassen???

Kommt drauf an, was für dich der "richtige Winkel" ist. Du kannst das ganze auch ohne Sinus/Cosinus machen. Du schaust, wie weit die y-Koordinate des Balls von y-Koordinate des Schlägers (bei beidem meine ich die Mitte) entfernt ist, und setzt dementsprechend die y-Bewegung des Balls höher oder niedriger.


wellensittich hat Folgendes geschrieben:
PS: SOMMERFERIEN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! xD !!!!

PS: SCHULZEIT VORBEI !!!!! Wink
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

DAK

BeitragMi, Jul 23, 2008 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du willst, kannst du das ganze natürlich über irgend welche komplizierten trigonometrischen berechnungen (die du laut deinen angaben selbst nicht verstehen KANNST) machen... die frage ist nur: ist das sinnvoll?

1. Du kannst das nicht -> irgend wer müssts für dich machen.
2. Du kannst keine Trigonometrie -> wenns wer für dich macht, würdest dus nicht verstehen -> du würdest daraus nichts lernen.
3. Es ist über die Trigonometrie recht schwer.
4. Es lässt sich auch ohne Trigonometrie / Winkel machen.
5. Ohne Trigonometrie / Winkel ist es einfacher.
6. Hättest du das Ganze ohne Trig/Winkel auch selber machen können (braucht nicht mehr als Volksschulmathematik (falls du aus Deutschland bist: Grundschulmathematik))
7. Löst man Probleme auf dem Weg, den man kann und fragt nur dann, wenn es keinen Weg gibt, auf den man selber kommen kann.
(8. Ohne läuft das Programm dann auch schneller)

(8. ist eingeklammert, da die Programmgeschwindigkeit bei einem Pong-Klon heut zu Tage nicht wirklich ein Promblem mehr ist... Allerdings sollte man sich möglichst früh angewöhnen, ressourcensparend zu programmieren. (Je weniger Rechenzeit eine coole Sache benötigt, desto mehr coole Sachen kann man einbauen))

Der beste Lösungsansatz dazu ist, wie schon oben von mir und dann noch mal von FireballFlame erläutert, dass du auf Winkel/Trigonometire pfeifst und das Ganze mit x/y-Geschwindigkeiten machst.

Das schaut dann so aus, dass der Ball jedes Frame um die X-Geschwindigkeit auf der X-Achse verschoben wird und das Selbe noch mal für Y.

Hier noch mal die Überprüfung für das Aufprallen des Balles auf den Schläger mit eingesetzten Werten (hättest du dir meinen Post durchgelesen hättest du das auch selber machen können)

Schlägerbreite hast du keine gesagt, darum geh ich mla von 10px aus.
Als Auflösung geh ich mal aus, hast du 800x600 genommen.
Code: [AUSKLAPPEN]
;für den linken Schläger
If ballx<=25 Then
  If bally>=schlägery-50 And bally>=schlägery+50 Then
    ;was passieren soll, wenn der Ball auf den Schläger trifft.
  Else
    ;was passieren soll, wenn der Ball am Schläger vorbei fliegt.
  EndIf
EndIf
;für den rechten Schläger
If ballx>=775 Then
  If bally>=schlägery-50 And bally>=schlägery+50 Then
    ;was passieren soll, wenn der Ball auf den Schläger trifft.
  Else
    ;was passieren soll, wenn der Ball am Schläger vorbei fliegt.
  EndIf
EndIf


PS: SOMMERFERIEN SCHON SEIT 3 WOCHEN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! xD !!!!
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group