Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-03-2011, 12:05   #1 (permalink)
es lebe die Luft
 
Registriert seit: Nov 2010
Ort: this.stage
Beiträge: 91
Steuerung in Flash-3D-Engine??

Hallo,

Also ich brauche etwas Hilfe bei dem sog. "Mode 7". (Mode 7 - Wikipedia, the free encyclopedia)

Diese Technik wendet Nintendo bei einigen GBA sowie NDS Spielen an ("Super Mario Kart Circuit", "Mario Kart DS", ....). Nun möchte ich einen ähnlichen Effekt in Flash erzeugen.

Dazu habe ich erstmal eine Straße und die Umgebung gezeichnet. Alle Objekte habe ich zu einem MC konvertiert, da ich so nicht jedes Objekt ansprechen muss, sondern nur einen MC. Nun habe ich einfach den Z-Wert des Objektes erhöht um praktisch "nach vorne zu gehen" und um nach links oder Rechts zu gehen, lasse ich den MC auf der Z Achse rotieren ("rotation_Z").
Aber:
Als ich an einem bestimmten Punkt war, funktionierte die Steuerung nicht mehr richtig. Wenn ich den MC nun rechts unten registrieren lasse (Rechtsklick auf Objekt --> In Symbol konvertieren --> Registrierung), funktioniert die Steuerung links oben nicht mehr usw.

Also ich denke, dass ich bei der Steuerung definitiv was falsch gemacht hab. Wäre also einer so freundlich, und würde mir bitte erklären, wie man in einer Flash-3D-Engine die Steuerung programmiert? Links zu richtigen Methoden/Objekten/Eigenschaften der API und eine Erklärung, wie ich sie einsetzen muss, wären sehr hilfreich.

MfG,
AIR-Fan
AIR-Fan ist offline   Mit Zitat antworten
Alt 21-03-2011, 09:33   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
a) wenn ich das richtig deute, dann ist das kein 3D, sondern nur eine fläche die gedreht wird. dafür gibts viele lösungen, musst mal danach suchen
gurgel mal und dann ausspucken:
flash 3d steuerung
flash 3d labyrint
z.b. ist nicht genau das selbe, geht aber in die richtung
gotoAndPlay Flash Tutorials -- 3D Maze

b) 3D-engine
damit sind i.d.R. programmpakete gemeint, die richtiges 3D unterstützen/anbieten. auch da mal nach suchen:
flash 3d engine
wenn du sowas einsetzen willst, dann sage uns welche.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 21-03-2011, 10:55   #3 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
ich weiß nicht, ob dir das was bringt, aber ich hab mal mein erstes cs5-3d-experiment rausgesucht. hab das damals alles nur im frame runtergetippt und nicht weiter verfolgt. daher musst du leider mit diesem spaghettiding klar kommen.

sieht leider echt übel aus, aber vielleicht findest du da drin ja was, das dir weiterhilft.

mfg

sx
Angehängte Dateien
Dateityp: fla stereo_00wii3_b.fla (448,5 KB, 7x aufgerufen)
shin10 ist gerade online   Mit Zitat antworten
Alt 21-03-2011, 16:38   #4 (permalink)
es lebe die Luft
 
Registriert seit: Nov 2010
Ort: this.stage
Beiträge: 91
Hi,

Danke euch beiden erstmal.

@hgseib:

Das Projekt beinhaltet das was ich suche, jedoch kann ich es nicht finden. Ich versuche es mal so gut wie möglich zu beschreiben:

Ja, ich versuche einen 3D Effekt zu imitieren. Das im Titel ist dann wohl falsch - sorry.
Wenn man auf den kleinen roten Knopf daneben drückt, dann erscheint eine Ansicht von oben. Die Funktion beinhaltet schon, was ich brauche. Nämlich, es wird immer von dem Punkt, wo man sich befindet gedreht. Nicht von links oben, Mitte oder sonstwo. Befinde ich mich in dem "Spiel" ganz oben, dreht sich das Ding von dem Punkt ganz oben. Befinde ich mich rechts unten, dreht es sich rechts unten.

Oder ein Beispiel aus Flash Pro. Ich habe ein Objekt vor mir. Dieses möchte ich drehen. Rechtsklick --> Frei transformieren. Nun erscheinen viele schwarze und ein weißer Punkt (in CS5 zumindest ...). Wenn ich den weißen Punkt ganz oben hinsetze dreht es sich oben usw. Also es dreht sich immer um den Punkt herum.

Meine Frage:
Gibt es einen Weg, den Punkt per ActionScript zu bestimmen? Also wenn ich ein anderes Objekt darauf setze, soll sich das um das drehen.

Wenn nein, wie hat es der von der Seite dann zusammengebracht?

Und das brauche ich bei 3D für die Befehle rotation_X/Y/Z. Wenn ich ein Objekt in einen MC verwandeln will, kann ich in dem Fenster die Registrierung auswählen (in CS5 heißt es zumindest so ...). Die Registrierung sollte aber bei einem anderen Punkt liegen, dh. bei dem Spieler.

Ich hoff das ist verständlich ...
Wenn nicht, bitte schreiben.

MfG,
AIR-Fan
AIR-Fan ist offline   Mit Zitat antworten
Alt 21-03-2011, 17:43   #5 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
sind genau die befehle, die du in meinem keylistener findest:
appendRotation() und
appendTranslation()

gedreht wird wie immer um den ursprungspunkt, des mc (daher das ganze gepacke in container)
ansonsten musst du nach der rotation nochmal entsprechend versetzen
shin10 ist gerade online   Mit Zitat antworten
Alt 21-03-2011, 18:03   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
aM laboratory
da gibts/gabs glaube ich auch mal quelltext dazu? musst halt mal ein bisschen rumstöbern.

suche: flash mariokart script
geht da noch was?
http://board.flashkit.com/board/show...hreadid=465420
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (21-03-2011 um 18:08 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 21-03-2011, 18:05   #7 (permalink)
es lebe die Luft
 
Registriert seit: Nov 2010
Ort: this.stage
Beiträge: 91
Was ich aus der API schließe, gibt es also keine Möglichkeit, den Ursprungspunkt einem Objekt zuzuweisen? (ohne Matrix3D)

Also wenn ich MC1 drehe, dann soll MC2 den Ursprungspunkt darstellen.

MfG,
AIR-Fan

EDIT:
@hgseib:
Das wäre was ich ich suche ....
Ist der Autor davon nicht hier im Forum?

Geändert von AIR-Fan (21-03-2011 um 18:13 Uhr)
AIR-Fan ist offline   Mit Zitat antworten
Alt 21-03-2011, 21:46   #8 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Worum geht es denn genau? Um die Darstellung oder die Steuerung?

Zur Darstellung würde ich heute einen Pixelbender Filter schreiben, der die Plane (Floor) zeichnet. Alles andere sind Billboards, die mit Skalierung und einfachem Z-Sorting in die Welt platziert werden können.

Die Steuerung sollte mit einer Matrix gemacht werden. Darin ist die Translation (Position) und die Rotation der Kamera gespeichert. Ich habe noch nicht viel Erfahrung mit der 2.5D API von Flash10, aber im jeden Fall funktioniert die Matrix für die Billboards und den Floor gleichermaßen. Wahrscheinlich kann man den Floor auch mit einem MovieClip machen.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 22-03-2011, 20:13   #9 (permalink)
es lebe die Luft
 
Registriert seit: Nov 2010
Ort: this.stage
Beiträge: 91
Also mit der Klasse Matrix habe ich bereits gearbeitet.

Es geht um die Steuerung.

In deinem Mario Kart Beispiel hast du das super gelöst. Egal wo sich das "Kart" befindet, die Umgebung dreht sich immer um das Kart. Sowas versuche ich auch zu erzeugen.

Bisher habe ich immer mit rotation_X/Y/Z die Umgebung gedreht. Aber da dreht der MC sich immer um den Ursprungspunkt, nicht um eine von mir durch ActionScript festgelegte Position (in deinem Beispiel das Auto).

Verstehst du was ich meine?

MfG,
AIR-Fan
AIR-Fan ist offline   Mit Zitat antworten
Alt 22-03-2011, 23:45   #10 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
Zitat:
Zitat von AIR-Fan Beitrag anzeigen
Aber da dreht der MC sich immer um den Ursprungspunkt, nicht um eine von mir durch ActionScript festgelegte Position (in deinem Beispiel das Auto).
das geht schon auch. das haben wir gerade da: Matrix3D: Rotation um einen lokalen Punkt

aber die mode 7 geschichte hat halt seinen ganz eigenen charme was die darstellung angeht.
abgesehen davon kann es passieren, dass das 3d-objekt zu groß ist und nicht gezeichnet werden kann. es wundert mich ehrlich gesagt gerade, dass es beim angehängten beispiel funktioniert
Angehängte Dateien
Dateityp: fla simplemariokart.fla (224,4 KB, 16x aufgerufen)
shin10 ist gerade online   Mit Zitat antworten
Alt 23-03-2011, 02:14   #11 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
hey könnt ihr mir mal nen gefallen tun und rückmeldung geben, ob das bsp oben und das hier bei euch funktioniert?

ING hat hiermit wohl probleme (ihm gehen die mcs komplett in die pampa flöten), aber bei mir läufts tadellos. würde mich interessieren woran das liegt.

danke schon mal

sx

edit: wir haben den fehler gefunden. scheinbar ein bug im fp unter ~10.1
aber ihr könnt ja bescheid geben, wenn ihr das evtl. noch genauer eingrenzen könnt. man weiß ja nie wofürs gut ist.

Geändert von shin10 (23-03-2011 um 02:40 Uhr)
shin10 ist gerade online   Mit Zitat antworten
Alt 23-03-2011, 19:20   #12 (permalink)
es lebe die Luft
 
Registriert seit: Nov 2010
Ort: this.stage
Beiträge: 91
Zitat:
Zitat von shin10 Beitrag anzeigen
[...]es wundert mich ehrlich gesagt gerade, dass es beim angehängten beispiel funktioniert
In dem angehängten Beispiel hast du das zusammengebracht, was ich suche.


Wo ist der EventListener für Keyboard.LEFT und Keyboard.RIGHT bzw. wie wird das gesteuert?

Setzt du mit dem die Position?
Code:
var kPos:Vector3D = kart.transform.matrix3D.position;
	pane.transform.matrix3D.appendRotation(dir, Vector3D.Y_AXIS, kPos);
Ich kenne mich da jetzt leider nicht sehr gut aus, da ich mit Matrix3D noch nie gearbeitet habe ...

MfG,
AIR-Fan

EDIT:
Also was ich so von hier hab: flash.geom.Matrix3D (ActionScript 3.0), steht, dass ich mit appendTranslation() den Registrierungspunkt bestimmen kann, den ich später aber wieder löschen muss? Oder irgendwie so? Mir ist aber trotzdem schleierhaft, wo ich definiere, mit welchen Tasten das Objekt gedreht wird ...

Aus der API:
Code:
myObject.z = 1; 
    myObject.transform.matrix3D.appendTranslation(10,10,0); //Definierung des Punkts?
    myObject.transform.matrix3D.appendRotation(1, Vector3D.YAXIS); //Drehung ...
    myObject.transform.matrix3D.appendTranslation(-10,-10,0); //Löschung??

Geändert von AIR-Fan (23-03-2011 um 20:13 Uhr)
AIR-Fan ist offline   Mit Zitat antworten
Alt 23-03-2011, 21:08   #13 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
Zitat:
Zitat von AIR-Fan Beitrag anzeigen
Wo ist der EventListener für Keyboard.LEFT und Keyboard.RIGHT bzw. wie wird das gesteuert?
das sind die ersten paar zeilen im enterframehandler. ich hab nur direkt 37 und 39 statt Keyboard.LEFT/RIGHT reingeschrieben.
PHP-Code:
function efh(e:Event):void{
    var 
dir:Number 0;
    
dir keys[Keyboard.LEFT] ? dir+dir;
    
dir keys[Keyboard.RIGHT] ? dir-dir;
    
speed Math.min(speed + (keys[Keyboard.UP] ? 10 0), 100);
... 
Zitat:
Setzt du mit dem die Position?
Code:
var kPos:Vector3D = kart.transform.matrix3D.position;
	pane.transform.matrix3D.appendRotation(dir, Vector3D.Y_AXIS, kPos);
sozusagen.
damit drehe ich pane (den boden)
um dir(ection) grad
um die y-achse
am punkt kPos (der kartposition)

ich seh aber auch gerade, dass ich da nicht ganz bei der sache war. ich hab da eine ganz beknackte mischform zamgeschrieben. einfacher wäre es natürlich nicht das kart zu verschieben, sondern nur das level. dann sieht das ganze so aus:

PHP-Code:
this.stage.stageHeight *.9;
this.stage.stageWidth*.5;

function 
efh(e:Event):void{
    var 
dir:Number 0;
    
dir keys[Keyboard.LEFT] ? dir+dir;
    
dir keys[Keyboard.RIGHT] ? dir-dir;
    
speed Math.min(speed + (keys[Keyboard.UP] ? 10 0), 100);
    
    var 
kPos:Vector3D kart.transform.matrix3D.position;
    
pane.transform.matrix3D.appendRotation(dirVector3D.Y_AXISkPos);
    
pane.-= speed;

    
speed*=.9;


Geändert von shin10 (23-03-2011 um 21:11 Uhr)
shin10 ist gerade online   Mit Zitat antworten
Alt 26-03-2011, 20:55   #14 (permalink)
es lebe die Luft
 
Registriert seit: Nov 2010
Ort: this.stage
Beiträge: 91
Gut, danke, Shin10.

Derzeit habe ich keine weiteren Fragen zum Code. Falls mir noch was einfallen sollte, schreib ich's.

MfG,
AIR-Fan
AIR-Fan ist offline   Mit Zitat antworten
Alt 27-03-2011, 15:09   #15 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
wunderbar - lass was sehen wenn's soweit ist.

mfg

sx

ps: wenn du die stageQuality auf LOW stellst sieht es besser aus ... nicht so unscharf und verwaschen.
shin10 ist gerade online   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
App Engine und Flash Henning06 Flash und Datenbanken 0 01-07-2010 07:27
Flash Search Engine SDK 1.0 Master of Disas Flash 4 und Flash 5 0 23-06-2003 16:08
3D Engine in Flash komashooter ActionScript 1 5 15-03-2003 16:55
Engine in Flash Nightflyer Softwarearchitektur und Entwurfsmuster 2 08-02-2003 10:58
3D Engine für Flash AcidProof Flash MX 4 11-05-2002 21:46


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele