• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-08-2010, 22:02   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2009
Beiträge: 7
Minigolf Winkelberechnung bei rundungen

Hallo,

ich bin gerade dabei ein Minigolfspiel zu programmieren. Es funktioniert soweit auch. Ich kann mit der Maus die Stärke und die Richtung (per Winkel) beeinflussen und der Ball startet dann auch. Jetzt ist die Frage wie mache ich das mit der Kollisionsabfrage? Ich habe mit Photoshop mir eigene Vorlagen gemacht für meine Bahnen, allerdings sind die nicht gerade sondern mehr oder weniger zufällige.

Hat jemand von euch Ahnung davon, wie ich nun den Ausfallswinkel berechnen kann?

Ich habe eine Vorlage für Actionscript 1&2 gefunden aber damit komme ich leider nicht klar kann nur AS3.

Grüße!
grauerpanther ist offline   Mit Zitat antworten
Alt 01-09-2010, 01:39   #2 (permalink)
Neuer User
 
Registriert seit: Oct 2004
Ort: Berlin
Beiträge: 478
Hallo,

ich kann Dir hier leider keine xy Lösung bzgl. Kollisionserkennung für dein Spiel bieten. Ist ja vielleicht auch nicht der Sinn der Sache.

Grundsätzlich: Es gibt eine ganze Reihe von verschiedenen Kollisionserkennungen. Welche davon sinnvoll ist, lässt sich nur je nach Spiel entscheiden. Wenn Kollisionserkennung X,Y,Z nicht ausreicht, ist natürlich die ultimative Lösung eine pixelbasierte Kollisionserkennung, die aber auch sehr viel Leistung verschlingt. Das Thema Kollisionserkennung ist ein ganz wesentliches für die Spieleprogrammierung u.a. mit Flash.

Vermutung: Bei einem Minigolf-Spiel solltest Du auch mit einer nicht-pixelbasierten Kollisionserkennung gut fahren können, soweit deine Objekte geometrisch sind.

Vielleicht hat jemand noch eine bessere Antwort - ich bin kein Spieleprogrammierer.
__________________
Adobe Flash CS5: Das Handbuch
Webdesign und Webentwicklung: medianetic

Gesendet von meinem Windows-PC.
Blog-relaunch: http://www.blog.medianetic.de
medianetic ist offline   Mit Zitat antworten
Alt 01-09-2010, 15:16   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 172
Hmmmm wäre schön wenn es so einfach wäre. Wie oben schon erwähnt ist eine pixelbasierte Lösung wohl am besten, aber auch am hardwareintensivsten für eine Kollisionsabfrage.

Daher würde ich empfehlen (Wenn die Bahnen eckig sind, also keine runden Ecken haben) einfach Movieclips dort hinzusetzen (wie eine Bande beim Billard)
Dann kannst du überprüfen ob der Ball eine Bande berührt. Wie das mit dem ein- und ausfallswinkel aussieht weiss ich leider nicht mehr.

Im Internet gibt es sicher noch Beispiele. Es gibt auch gute Bücher über Flash und Gameprogrammierung. Leider viele in englisch.
Oder suche mal nach ähnlichen Beispielen (Arkanoid) oder wie das alte Game heisst, du weisst schon, das wo man einen Balken steuert und mit der Kugel Klötzchen treffen muss. Dort gilt auch: Ausfallswinkel = Einfallswinkel *= -1

__________________
- Portfolio
R3PL4Y ist offline   Mit Zitat antworten
Alt 01-09-2010, 15:52   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
H.G.Seib -> Spiele
Minigolf (4) AS2 und bassiert auf tiles. also die bahn kann beliebig aus quadraten zusammen gesetzt werden.
(wer AS3 kann, der sollte eigentlich auch einen AS2-script lesen können.)


H.G.Seib -> PinLines-Engine, nur zum ansehen (kein quellcode)
man kann durchaus auf rundungen verzichten. ein polygon (viele kanten) tut's auch.


und viel mathe ;-) H.G.Seib
wenn dir ein polygon zu eckig ist, dann ergänze noch kreise.
grundsätzlich gehen auch splines und andere kurven. die zu berechnen ist aber höchst aufwendig (will sagen, für ein mini-golf eigentlich zu viel aufwand):
H.G.Seib -> berührungen
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (01-09-2010 um 15:55 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 03-09-2010, 08:04   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 546
Um Lineare Algebra und ein paar Winkelfunktionen wirst du beim Selbermachen nicht herumkommen.

Die Reflexionsrichtung r (Einfallswinkel = Ausfallswinkel) wird anhand der Oberflächennormalen n (Richtung senkrecht von der Oberfläche weg) und der Einfallsrichtung v (Bewegungsrichtung des Balls) berechnet, wobei die Richtungen als normalisierte Vektoren (Länge=1) gespeichert sein müssen:
r=-2*(v.dot(n))*n+v

Wenn dich Details interessieren: Reflexion ? DGL Wiki

in AS z.B. so:
ActionScript:
  1. function reflectPhysical(ball:Object,normal:Point){
  2.     var v1:Number=(-ball.direction.x*normal.x*2)+(-ball.direction.y*normal.y*2);//(dir*-1).dot(normal)*2
  3.     ball.direction.x=v1*normal.x+ball.direction.x;
  4.     ball.direction.y=v1*normal.y+ball.direction.y;
  5. }

Um die Kollision pixelgenau zu erkennen und dabei noch die Oberflächennormale zu bestimmen, dazu würde ich etwa folgendes versuchen:
- einen virtuellen Kreis aus n Punkten rund um den Ball bilden und diese Punkte per hitTestPoint (bzw. getPixel) abtasten.
- Wenn mindestens einer der Punkte true zurückgibt, berührt der Ball eine Grafik.
- der Mittelwert aller nicht getroffenen Punkte gibt die Richtung der Oberflächennormalen an.
- je größer n, desto genauer

Leider wird es da auch Sonderfälle geben (z.B. sich exakt gegenüberliegende Punkte ergeben true bzw. false -> die Mittelrichtung ist 0). Das müsste man mal experimentell bestimmen wie man diese am besten erkennt und behandelt. Am sichersten wäre da wohl eine Binärmatrix mit gespeicherten Lösungen.
joeydee ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash 2] Minigolf in Flash moku1990 Flash Einsteiger 5 04-02-2009 18:08
Grundlegende Frage zu Minigolf (Wände erstellen) dhouzer Spielkonzepte und Spieleprogrammierung 5 11-01-2006 13:08
Minigolf physics H.Storm Spielkonzepte und Spieleprogrammierung 2 01-04-2005 19:04
Rundungen der Grafik andyowl Flash MX 8 11-05-2004 17:28
http://www.electrotank.com/lab/miniGolf.html celcius Coolsites 9 05-04-2002 20:45


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele