Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-05-2009, 18:05   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
Architektur grösserer Anwendung

Hallo zusammen!

Ich bin grad an meiner Diplomarbeit dran, es wird ein kleiner Segelflugsimulator mit Papervision. Und ich bin grad dabei, mir meinen ganzen Aufbau zu organisieren. ich würd das gern mit MVC umsetzen, das Prinzip an sich ist mir klar.
Der View kennt das Model und den Controller, Controller kennt das Model, Model kennt niemanden. Ich hab jetzt für mein Flugmodell also ein Model, wo die ganzen Berechnungen stattfinden, einen Controller und einen View. Ist soweit klar.

Jetzt hab ich noch ein paar Fragen:
Meine Klasse "MainView" ist eine Komposition aus mehreren Views. Eben dem "GliderView", der das Flugmodell darstellt, und mehreren Views, die eigentlich nur statische Szenerie darstellen, also kein Model haben. Jetzt frag ich mich, wie kann ich da die Kollisionserkennung am elegantesten durchführen? Das müsste ja dann alles im View ablaufen, was ich aber unschön finde, weil das ja eigentlich die Aufgabe des Models wäre?

- Wie ist es mit Soundeffekten? Gehören in den View denk ich mal.

- Noch eine allgemeine Frage:
Ich frag mich oft, wie man für die Anwendung den Einstieg findet. Hab ich in meiner Dokumentenklasse wirklich nur die drei Instanzierungen von Model, View und Controller, die mehr oder weniger Kompositionen aus den einzelnen Klassen sind?
Oder erzeuge ich quasi "Komponenten", die für sich dann M, V und C instanzieren? Ist jetzt vielleicht nicht so wichtig, mehr eine Schönheitsfrage, aber mich würds trotzdem interessieren.

Hab noch nie grössere Projekte gemacht, deswegen bin ich mir da nicht ganz klar, wie sowas aufgebaut wird.
Danke im Voraus für Hinweise und Tipps

lg
Chris
grizu ist offline   Mit Zitat antworten
Alt 01-06-2009, 19:17   #2 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
Was den Aufbau von MVC angeht empehle ich Dir die wirklich gut geschriebene
Anleitung von PureMVC zu lesen: http://www.puremvc.org/

Kollisionsabfragen finden nicht in der View statt, wie Du schon gesagt hast.
Wieso auch?

Du hast Objekte im Modell, die auf Kollision getestet werden. Die View stellt
nur das Ergebnis dar. Du hast ein Modell deines Flugzeugs im Modell, mit
Position, Geschwindigkeit und anderen Eigenschaften. Die View stellt diese
Eigenschaften nur dar.

Welche Objekte aus dem Modell mit in die Kollisionsabfrage gesteckt werden,
musst Du festlegen.
malthoff ist offline   Mit Zitat antworten
Alt 02-06-2009, 08:07   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
Das ist ehrlich gesagt genau das, was ich nicht ganz verstehe.

Ich hab recht viele Szenerie-Objekte, also reine View-Objekte. Leg ich mir jetzt für jedes dieser Objekte ein Model an? Also halt in diesem Fall ein reines Datenobjekt, das die Position der Vertices etc. speichert? Wie wird sowas in "echten" Games programmiert?

Geht das nicht auch zu sehr auf die Performance, wenn man quasi jedes Objekt zweimal darstellt (einmal im View und im Model)? In meinem Fall wären das pro Objekt zwei DisplayObject3Ds.

Und wie weit kann man das eigentlich treiben? Ich könnte ja auch meine Kamera in MVC unterteilen: Ein reines Datenobjekt, das eben mit dem Flugmodell zusammenarbeitet, und der CameraView, der nur die aktuellen Positionen und Rotationen übernimmt.
...Jeder Baum, jedes Objekt, das irgendwie eine Kollision hervorrufen könnte, braucht ein Model?
grizu ist offline   Mit Zitat antworten
Alt 02-06-2009, 22:30   #4 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
Du musst ein bischen weg davon zu denken, dass jedes View Objekt einem
dicken anderen Objekt entsprechen muss. Das Modell für dargestellte Bäume
könnte in einem einfachen Falle etwas sein wie:
PHP-Code:
class Modell {

private var 
allTrees:Array // in dem Array stecken Point Objekte (new Point(x,y);


Dann würdest Du in deiner Hauptfunktion, die für das Darstellen der Objekte
verantwortlich ist, einfach das Array durchgehen und an die Positionen, die in
den Point Objekten gespeichert sind, Bäume rendern.

Es wird dann höchstwahrscheinlich noch eine Mechanik notwendig sein, um
zum Beispiel die darzustellenden Bäume von der Gesamtmenge zu trennen,
damit dich die Performance nicht verlässt. etc...
malthoff ist offline   Mit Zitat antworten
Alt 03-06-2009, 13:46   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
Also erstmal danke, dass du mir da weiterhilfst

Bin inzwischen auf einen geilen Link gekommen:
http://www.gamasutra.com/features/20...rouwe_01.shtml

...
Ich glaub, das ist ein wichtiger Punkt: dass man das Model so sparsam wie möglich hält, und nur die Daten verwendet, die wirklich notwendig sind, um ein funktionsfähiges Modell zu erzeugen.
In meinem Fall würde also eine "private var matrix:Matrix3D" eigentlich schon für alle Entities (bin über den Begriff gestolpert) im Model reichen - also für alle Objekte, die irgendwie Aktionen/Reaktionen auslösen können.
Und die Kollisionserkennung wird auch im Model durchgeführt, im Falle meines Flugmodells ist es halt einfach die boundingSphere (oder aabb), die im Model definiert wird.

Ich bin jetzt nur noch am Überlegen, wie ich die Kollisionserkennung mit meiner Landschaft durchführen soll, die muss nämlich genau überprüft werden: Ich könnte also im Landscape-Objekt im Model z.B. einfach ein Array mit den Vertex-Koordinaten speichern, die am Anfang des Games gesetzt werden. Die Koordinaten kommen direkt aus dem View.

Ich hab mal ein UML-Diagramm angehängt (im Titel steht größere Anwendung, und jetzt komm ich mit meinen paar Klassen - ist aber trotzdem ein großes Ding für mich)
Angehängte Grafiken
Dateityp: gif fly.gif (13,4 KB, 21x aufgerufen)
grizu 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele