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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-08-2010, 14:26   #61 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Hm, bekomm ich nicht hin.
Was ist bei dir denn Waffe und Gegner ?
Eine Klasse oder ein erzeugter MC ?

Das zum BEispiel funktioniert mit deiner KLasse nicht



PHP-Code:
import Schuss;
var 
Feind:MovieClip = new MovieClip();
this.addChild(Feind);


for (var 
i:int 1<= 1i++) {
    var 
Waffe = new Schuss()as MovieClip;
    
this.addChild(Waffe);


ausserdem hab ich keine Animation, da müsste deine Klasse Schuss ja noch den extend schussanimation bekommen.
izanagi ist offline   Mit Zitat antworten
Alt 05-08-2010, 15:06   #62 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
hi,

Waffe und Gegner waren klassen. Gegner ist im prinzip vollkommen leer gewesen. in Waffe hatte ich lediglich eine funktion zum schießen.
PHP-Code:
package  {
    
import flash.display.MovieClip;
    
    public class 
Waffe extends MovieClip{

        public function 
Waffe() {
            
// constructor code
        
}
        public function 
schiessen(g:Gegner):void{
            var 
= new Schuss(thisg);
            
stage.addChild(s);
        }
    }
    

fast schon überflüssig.

meine hauptklasse Spiel sah so aus
PHP-Code:
package  {
    
import flash.display.MovieClip;
    public class 
Spiel extends MovieClip{

        public function 
Spiel() {
            
// constructor code
            
var = new Waffe();
            
w.300;
            
w.100;
            
addChild(w);
            var 
= new Gegner();
            
g.400;
            
g.400;
            
w.schiessen(g);
        }
        public static var 
pause:Boolean false;
        public static function 
treffer(sh:Schuss):Boolean{
            return 
false;
        }

    }
    

also eigentlich wurde da nur ein gegner auf die bühne gesetzt und auf diesen geschossen. ob getroffen wird, wird noch nicht mal geprüft. aber man könnte pause "drücken".

mfg

sx
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 05-08-2010, 16:03   #63 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Kann man die ganzen Abfragen auf die Klasse beziehn statt jedes Objekt einzeln?
Du hast jetzt im Beispiel nur einen Gegner und eine Waffe,
es gibt aber mehrere Gegner die ne eigene Nummer haben
und auch verschiedene Typen. Genauso die Waffen haben verschieden Typen.

Z.B Schuss1[0] bis Schuss1[50] oder Schuss4[0] bis [50]

Da funktioniert das ja dann nicht mehr so dynamisch.

Geändert von izanagi (05-08-2010 um 16:05 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 05-08-2010, 20:30   #64 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Habe deine Art jetzt fast umgesetzt.
Bei der Klassengenerierung hakt es aber, guck mal, was ist da falsch:

PHP-Code:
package  {
    
import flash.display.MovieClip;
    
import flash.utils.getDefinitionByName;
    public class 
Waffe extends MovieClip{
         private var 
aktwaffe:int;
        public function 
Waffe() {
            
// constructor code
        
}
        public function 
schiessen(g:Gegner):void{
            
            
            var 
quelle:MovieClip this.parent as MovieClip;
            
trace(quelle.aktuellewaffe);
            
aktwaffe quelle.aktuellewaffe;
            
                var 
waffenklasse="Schuss"+aktwaffe;// klasse initialisieren
                
var klassenname:Class=Class(getDefinitionByName(waffenklasse)) as Class;
                                        
            var 
= new klassenname(thisg);
            
stage.addChild(s);
            
s.gotoAndPlay("feuer");
            
        }
    }
    

Er sagt Error #1065: Variable Schuss1 ist nicht definiert.
izanagi ist offline   Mit Zitat antworten
Alt 06-08-2010, 03:07   #65 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
hmm,

hast du denn eine klasse, die Schuss1 heißt? Schuss1 ist bei dir doch ein Array, oder?
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 06-08-2010, 12:08   #66 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Hi Shin,
ja die Klasse Schuss1 existiert. Und hat Waffe1 als extend, für die Animation.
Ist auch Importiert in der Main.

Ein Array?? ehm kein plan, die Klasse wird ja durch getDefinitionByName erst
definiert. WEIL
PHP-Code:
 var = new "Schuss"+aktwaffe (thisg); 
geht ja nicht...

aber ich hab ne neue Idee und zwar noch einfacher

Zitat:
public class Schuss extends "waffe"+aktwaffe {
aber das geht NICHT, war ja klar

Geändert von izanagi (06-08-2010 um 12:42 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 06-08-2010, 15:43   #67 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
also deine zwei letzten varianten können nicht funktionieren.
funktioniert denn
PHP-Code:
var = new Schuss1 (thisg); 
überhaupt?

mfg

sx
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 06-08-2010, 18:47   #68 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
ja das funzt.

ich möchte aber jetzt lieber eine dynamische Klasse gestalten.
Sprich, "extends" dynamisch und Geschwindigkeit+Nachladen

Hab die Energie FUnktionin eingebaut.
leider noch ein fehler drin http://www.4treff.de/tests/Waffen_prototyp2.html

Geändert von izanagi (06-08-2010 um 18:52 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 07-08-2010, 04:49   #69 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
Zitat:
ich möchte aber jetzt lieber eine dynamische Klasse gestalten.
Sprich, "extends" dynamisch und Geschwindigkeit+Nachladen
weiß jetzt nicht ob du das meinst, aber ich hab gestern nacht noch ein wenig herumgespielt. vielleicht bringt dich das weiter. ist leider nicht so übersichtlich/sauber, aber stöber doch mal ein wenig drin rum.

EDIT: in der version hat allerdings jedes objekt nen enterframehandler ... ich denke besser wäre es, wenn stattdessen die funktion jeweils von der spiel-klasse in einer festgelegten reihenfolge aufgerufen wird.
__________________

flintfabrik.de

Geändert von shin10 (23-09-2010 um 12:05 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 07-08-2010, 12:14   #70 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
moin

ich hing auch wieder bis 5 uhr heute,... kopfweh ^^
Ich schau mir dein tolles Ding mal an.
Mann, wofür du ne kurze Zeit brauchst, brauchte ich jetzt 1 Woche

EDIT: Unerwartetes Dateiformat. Ich hab CS4

EDIT2: hab mir die klassen aber angeschaut und muss leider sagen
das ich da nicht mehr folgen kann. Das ist mir nun zu komplex,
da komm ich als Designer an meine grenzen.
default length return !=null und splice kenn ich überhaupt garnicht *.*

Hast du eigentlich ein paypalkonto? kannste mir per PN mal bei gelegenheit schicken

Geändert von izanagi (07-08-2010 um 12:37 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 07-08-2010, 16:32   #71 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
so,

nochmal die fla als cs4 version. ist ja eh kaum was drin. nur die fünf mcs.

Zitat:
Mann, wofür du ne kurze Zeit brauchst, brauchte ich jetzt 1 Woche
mach dir da mal keinen kopf. beim rumbasteln an spielen hab ich immer am meisten gelernt. ich glaub ich hab da bisher etwa 3 dutzend angefangen und nicht ein einziges wirklich zu ende gebracht.

jetzt is schon halb fünf und du hast vermutlich das meiste schon nachgeschaut. drum nur kurz:
default: damit definiert man in einer switch anweisung was gemacht werden soll, wenn nichts von den anderen fällen zutrifft.
!=null damit kann man mal schaun, ob es ein objekt überhaupt gibt, bevor man darauf zugreift. andernfalls könnte es zu fehlern kommen.
splice ist nützlich um arrays mittendrin zu ändern (einschieben oder entfernen von elementen)
aber frag ruhig nochmal. das war jetzt sicher ein klotz (mach ich eigentlich ungern).

mfg

sx
__________________

flintfabrik.de

Geändert von shin10 (23-09-2010 um 12:05 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 07-08-2010, 22:40   #72 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
neeeeein ich hab das Problem wovor ich die ganze zeit Angst hatte
Nach paar Gegnern und paar generierten Schusswaffen geht die Performce
in den Keller
Alles ruckelt.

Kannste selbst mal schauen und neue gegner erschaffen.
Aber nicht zu schnell hintereinander weil die sonst miteinander collidieren und dann stehen bleiben. Das liegt an der "Eigen Collision" Der Arsch(radius) eines Gegners wird immer mit dem hinterkommenden Gegner abgefragt.

Wenn ich DIESE eigen collison deaktiviere, läuft das Spiel stabil.
Ich hab dir beide versionen rein gemacht.
Waffen_ohneColli
Waffen_mitColli

EDIT: komisch im Browser läuft es viel stabiler, sag mal Shin ist der Compiler Player irgendwie nicht so gut? Innerhalb des Flash Tools.
Hab mir jetzt übrigends angewohnt neben removeChild direkt noch "delete" zu benutzen. Hoffe das spart Performance

Geändert von izanagi (08-08-2010 um 00:37 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 08-08-2010, 01:28   #73 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
viell kannst du mir kurz sagen warum das delete nicht ganz klappt.
Mit dem ersten lösch ich das Child aus dem Kontainer
Mit dem zweiten sollte die Instanz aus der Objektliste gelöscht werden.
Klappt aber nicht
PHP-Code:
trace("noch lebt="+e.currentTarget.name);
gegner[e.currentTarget.parent.parent.nummer].holder_gegner.removeChild(e.currentTarget);//  child entfernen

delete this[e.currentTarget]; //instanz komplett löschen
trace("müsste tod="+e.currentTarget.name);

Geboren wurde die Instanz hier:
var 
gegnerani:MovieClip=new styleClassName  ;
gegner[gegnernr].holder_gegner.addChild(gegnerani) as MovieClip
EDIT: ich hab mal genrell die Frage, wenn ich eine Variable MovieClip Instanz erzeuge und davon ein Child auf die bühne lade,
KÖNNTE ich doch nach dem addChild die Instanz, also die Variable MovieClip direkt wieder löschen aus der Displayliste oder ?
ich meine das so:
Zitat:
var gegnerani:MovieClip=new styleClassName ;
gegner[gegnernr].holder_gegner.addChild(gegnerani) as MovieClip;
gegnerani.name="gegner"+[gegner[gegnernr].nummer]+"mittyp"+gegnertyp;
gegnerani=null;
delete this.gegnerani;
Das child hab ich ja auf der bühne, die instanz brauch ich doch nicht mehr und könnte sie für den nächsten gegner nutzen.
Aber beim testen zeigt der erste Instanzname von gegnerani ist "instance396"
beim zweiten mal ist er "instance399". Wieso ist das so ?

Geändert von izanagi (08-08-2010 um 02:17 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 08-08-2010, 03:27   #74 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
oha,

langsam langsam.
du kannst einen mc nicht mit delete löschen. mit delete kannst du nur dynamisch generierte eigenschaften löschen. kleines beispiel:
PHP-Code:
import flash.display.MovieClip;

var 
mc:MovieClip = new MovieClip();
mc.name "Dings";
mc.irgendwas "da";
trace(delete mc.name);//false, weil es eine eigenschaft ist, die ein mc immer hat
trace(delete mc.irgendwas);//true, weil es eine dynamisch erstellte eigenschaft ist 
e.currentTarget kannst du also nicht löschen, abgesehen davon ist sind die eigenschaften eines events schreibgeschützt.
delete mc funktioniert auch nicht, weil die variable fest erstellt wurde. du kannst aber mc=null setzen, um den verweis auf den mc zu löschen. (jetzt aber wichtig: weiterlesen!)


nächster punkt:
variablen und instanzen sind absolut nicht das gleiche.
mc ist die variable; new MovieClip() erstellt eine neue instanz der klasse movieclip. durch die variable kannst du auf die instanz zugreifen. eine instanz existiert solange, bis die garbagecollection sie löscht. das passiert erst, wenn KEINE verweise auf die instanz mehr existieren. daher musst du:

-alle eventlistener entfernen. (wenn du das nicht tust, kann es sein, dass die instanz immer weiter im speicher bleibt. denn durch den verweis des listeners wird sie nicht gelöscht, du kannst aber u. u. nicht mehr darauf zugreifen, weil es keine variable mehr gibt, die die instanz für dich greifbar macht)

-die instanz mit removeChild oder ähnlichem aus der displaylist (also von der bühne) nehmen

-alle variablen, die auf die instanz verweisen auf null setzen mc=null;

daher bekommst du auch jedesmal nen anderen namen, weil es eine andere instanz ist. auch, wenn du die selbe variable dafür benutzt.

mfg

sx
__________________

flintfabrik.de

Geändert von shin10 (08-08-2010 um 03:36 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 08-08-2010, 12:36   #75 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
ahh lieben dank shin. da kommt das verständnis besser auf.
Visuelle Menschen wie ich haben es da was schwieriger sich das vorzustellen
wenn man es nicht sieht
Nochma danke.

EDIT: und ich dachte immer die variable WIRD zu einer movieclip instanz weil ich sage var whatever:MovieClip

Geändert von izanagi (08-08-2010 um 14:34 Uhr)
izanagi 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
mehrere Kollisionen sparsam erstellen (Tower Defence Game) ?!? themerx Flash 8 5 29-10-2008 14:35
hilfe bei erstellung von tower defense flash cmdSoniq ActionScript 1 7 12-02-2008 16:17
Die ersten Schritte hunkarcelebi Flash Einsteiger 17 28-02-2006 22:12
ersten 3d schritte... Hamster2k Softwarearchitektur und Entwurfsmuster 35 21-10-2002 12:45
sound wird beim Preloader auf ersten dem ersten Frame geladen II werbe-grafix Flash 4 und Flash 5 1 18-12-2001 19:24


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele