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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-05-2007, 17:54   #1 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
OOP und Spieleprogrammierung

Also mal ne Grundsätzliche verständnissfrage zum Spieleprogrammieren.
Sollte ich meine Funktionen und alles weitere, sprich abfragen, kollision,
spielelogik, KI usw. auf Klasse aufteilen und in eine "main" funktion
einrichten die nur alles abruft?

Also mein gedanke wart sowas in der art:
  • CFramework
  • CTimer
  • CSprite
  • CPlayer
  • CGame
  • main
    ActionScript:
    1. import CFramework;
    2. import CGame;
    3.  
    4. // Main
    5. var g_Framework : CFramework = new CFramework();
    6. var g_Game : CGame = new CGame();
    7.  
    8. function main() : Void
    9. {
    10.     if(g_Framework.Init(...) == false) return;
    11.  
    12.     g_Game.Init();
    13.     g_Game.Run();
    14.     g_Game.Quit();
    15.  
    16.     g_Framework.Quit();
    17.     g_Framework.Delete();
    18. }
    19.  
    20. main();
also mir gehts eher darum ob sowas sinnvoll ist und ob dies in flash möglich ist.
weil bis jetz habe ich eigentlich sehr viel eines spieles immer auf dem 1. Frame gehabt
wo ja normalerweise der code stehen soll.

edit =>
oh was vergessen ^^

also das problem is das, dass ich in den klassen nicht auf die objekte zugriefen kann ohne z.b
vorher einmal root zu benutzen oder so. dies müst ich ja dann in jeder klasse machen. aber das soll man ja
eigentlich nicht machen und ich benutze root eigentlich nie. die klassen sollen ja schließlich reine objekte
sein mit methoden und eigenschaften ohne globalen einfluss von sich selber aus zu haben oder?
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi

Geändert von _crypto_ (03-05-2007 um 18:00 Uhr)
_crypto_ ist offline   Mit Zitat antworten
Alt 03-05-2007, 18:22   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Ja das macht auch in Flash Sinn.
Um auf _root zugriff zu haben und dennoch sauber zu programmieren empfiehlt sich diese Technik:
PHP-Code:
class Game
{
    private var 
timeline:MovieClip;
    
    public function 
Gametimeline:MovieClip )
    {
        
this.timeline timeline;
        
this.init();
    }
    
    private function 
init():Void
    
{
        
// create game stuff
    
}

In der fla Datei kannst du dann dein Spiel so starten:
PHP-Code:
var g:Game = new Gamethis ); 
mit this übergibst du Zugriff auf die _root, du musst aber nicht die _root übergeben, man kann auch jeden anderen MovieClip nehmen der für das Spiel als root dienen soll.
__________________
ERROR: Signature is too large

Geändert von rendner[i] (03-05-2007 um 18:28 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 03-05-2007, 18:32   #3 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
ok das hätten wir.

und zu der anderen frage. sollte man auf der zeitleiste nur
so eine "main" funktion wie oben provisorisch geschrieben erstellen
und die aufgaben auf klassen verteilen oder eventuell ganz anders
als ich mir das so denke ^^ ?
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi
_crypto_ ist offline   Mit Zitat antworten
Alt 03-05-2007, 18:40   #4 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Schon alles auf Klassen verteilen, dann eine Klasse verfassen die das Spiel erstellt (bei dir main) und diese dann wie im obrigen Beispiel in der fla instanzieren.

PHP-Code:
var main:Main = new Mainthis ); 
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 03-05-2007, 19:04   #5 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Noch besser ist es wie in Java

ActionScript:
  1. public static function main():Void
  2. {
  3.    var m:Main = new Main(_root);
  4. }

Brauchst du auch, wenn du mit MTASC arbeitest.

Ansonsten ist die Aufteilung der Klassen natürlich die Kunst um die es geht.
Da kann man dir kein Pauschalrezept geben, aber mit der Zeit wird das schon.

lg
sebastian ist offline   Mit Zitat antworten
Alt 03-05-2007, 19:16   #6 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
ja cih scheitere des öfteren daran das mir dann die klassen so unnütz vorkommen
eben nur eine klasse extra für punkteberechnung. das kommt mir eben so unnütz vor,
ich würds normalerweise in die Game klasse oder so packen.

gibts denn keine fausteegeln oder so ab wann sich ne klasse lohnt?
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi
_crypto_ ist offline   Mit Zitat antworten
Alt 03-05-2007, 19:36   #7 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Eine Klasse sollte wenn möglich nur eine Sache machen und nicht alles, ganz egal wie klein dann die Klasse ist.

Vielleicht hilft dir das auch etwas weiter...
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 03-05-2007, 20:03   #8 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Für MTASC empfiehlt sich eher:
PHP-Code:
public static function main(timeline:MovieClip):Void
{
         var 
m:Main = new Main(timeline);

Dann funktioniert es auch noch, wenn man das MTASC kompilierte Spiel in einen anderen Flash-Film in einen MovieClip läd.

EDIT:
Zum eigentlichen Problem: Kann ich redner nur zustimmen, oft merst du dann auch, dass die "nur" die Punkteberechnung z.B. viel komplizierter ist, als du dachtest, und in einer eigenen Klasse legt man viel leichter neue Methoden an, um das Problem zu gliedern, als wenn man eine völlig überladene Main-Klasse hat.
Man muss aber auch nicht alles von Anfang an perfekt aufbauen, wenn du später merkst, dass die Sache viel einfach geht, oder wenn du merkst, dass eine Methode tausend Abhägigkeiten von außen hat, aber keine von der Klasse in der sie liegt, dann spricht nichts dagegen, den Code in eine andere Klasse zu integrieren.
Nennt sich dann Refactoring und ist eine Wissenschaft für sich.

Was du dir auf jeden Fall gut überlegen musst ist, welche Klasse eigentlich welche andere kennt, bzw. auf welchen Wegen kommuniziert wird, wenn du da nicht klare Wege einhälst, wirst du dich schnell in deinen Klassen verstricken.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)

Geändert von Janoscharlipp (03-05-2007 um 20:10 Uhr)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 03-05-2007, 20:13   #9 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Wird die Zeitleiste echt als Parameter übergeben?

Würde ich ja sehr genial finden!
sebastian ist offline   Mit Zitat antworten
Alt 03-05-2007, 20:59   #10 (permalink)
DeRailed
 
Benutzerbild von klickverbot
 
Registriert seit: Sep 2006
Beiträge: 321
@Sebastian W.: Ja, das funktioniert wirklich.
__________________
Zum Thema Code im Forum posten:
Mit den [AS]-Tags bekommt man eine tolle farbige Anzeige, bei der sogar die Zeilennummern eingetragen sind.

Wie man aus [AS]-Tags Code direkt ohne die Zeilennummern kopiert:
Einfach auf den 'Beitrag zitieren'-Knopf drücken und Spaß mit Copy&Paste haben ;)
klickverbot ist offline   Mit Zitat antworten
Alt 03-05-2007, 21:07   #11 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
Zitat:
Zitat von Janoscharlipp Beitrag anzeigen
Was du dir auf jeden Fall gut überlegen musst ist, welche Klasse eigentlich welche andere kennt, bzw. auf welchen Wegen kommuniziert wird, wenn du da nicht klare Wege einhälst, wirst du dich schnell in deinen Klassen verstricken.
"Vererbungsorgie" find cih total toll das wort

ja also mit vererben und, friend class (jetz nich in flash ) bin ich schon vorsichtig.
aber danke an euch alle
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi
_crypto_ 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 18:22 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele