Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-07-2005, 18:35   #1 (permalink)
o_0
 
Benutzerbild von DoTheSinWave
 
Registriert seit: Apr 2005
Ort: zuhause
Beiträge: 79
Ein Problem mit Klasse

Die Aufgabe, die ich mir gestellt habe: eine Klasse zu machen, die Matrizen definiert, und diese durch eine Funktion miteinander multiplizieren kann.
da das mein erster Versuch mit Klassen überhaupt ist, funktioniert natürlich gar nichts.

code in der fla:
ActionScript:
  1. m1=new matrix
  2. m2=new matrix
  3. m1.array=[[1,1,1],[1,1,1],[1,1,1]]
  4. m2.array=[[2,2,2],[2,2,2],[2,2,2]]
  5. //die multiplizierte Matrix ausgeben:
  6. trace(MMply(m1,m2))

code in der Datei "matrix.as":
ActionScript:
  1. class matrix {
  2.     var array:Array;
  3.     private var vert, i, hor:Number;
  4.     private var multi:Array;
  5.     function matrix() {
  6. //als einheitsmatrix initialisieren:       
  7. array = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
  8.        
  9.     }
  10.     function MMply(m1:matrix, m2:matrix) {
  11.         for (hor=0; hor<3; hor++) {
  12.             for (vert=0; vert<3; vert++) {
  13.             for (i=0; i<3; i++) {
  14.                     multi[hor][vert] += m1[hor][i]*m2[vert][i];
  15.                 }
  16.             }
  17.         }
  18.         return multi;
  19.     }
  20. }
ich bitte um Korrektur der Fehler.
DoTheSinWave ist offline   Mit Zitat antworten
Alt 26-07-2005, 19:22   #2 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
ActionScript:
  1. m1=new matrix()
  2. m2=new matrix()

klammern müssen sein, da der Konstruktor aufgerufen werden muss!
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 26-07-2005, 20:11   #3 (permalink)
...
 
Benutzerbild von flash bier
 
Registriert seit: Nov 2001
Beiträge: 1.227
und muss das nicht heissen:
trace(m1.MMply(m1,m2));
oder
trace(m2.MMply(m1,m2));
?
Die Methode MMply kenn doch nur eine Instanz des Objekts matrix (also m1 oder m2) .....

MfG flash bier
__________________
Schweig oder sprich Worte, die besser sind als Schweigen !
flash bier ist offline   Mit Zitat antworten
Alt 26-07-2005, 20:33   #4 (permalink)
o_0
 
Benutzerbild von DoTheSinWave
 
Registriert seit: Apr 2005
Ort: zuhause
Beiträge: 79
aber von der funktionsweise her müsste eigentlich alles klappen, bis auf solche speziellen Fehler wie ihr sie genannt habt?
ich meine, stimmen das variablen-handling und die methode, mit der die matrizen multipl. werden?

stimmt die zuweisung der werte für die Matrix in der .fla so?
ActionScript:
  1. m1.array=[[1,1,1],[1,1,1],[1,1,1]]


Zitat:
und muss das nicht heissen:
trace(m1.MMply(m1,m2));
oder
trace(m2.MMply(m1,m2));
?
Die Methode MMply kenn doch nur eine Instanz des Objekts matrix (also m1 oder m2) .....


ergebnisse:

ausgabe bei trace(m1.MMply(m1,m2))
oder trace(m2.MMply(m1,m2)): "[object Object]"

bei trace(MMply(m1,m2)): undefined

hmmm...zumindest ein kleiner Fortschritt. vielleicht.

Geändert von DoTheSinWave (26-07-2005 um 20:35 Uhr)
DoTheSinWave ist offline   Mit Zitat antworten
Alt 26-07-2005, 20:34   #5 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Zitat:
Zitat von flash bier
Die Methode MMply kenn doch nur eine Instanz des Objekts matrix
stimmt!
aber da diese methode nix mit der instanz zu tun hat, kannst du sie statisch machen... dh der aufruf direkt über den klassen-prototype:
ActionScript:
  1. matrix.MMply(m1,m2);

deklaration so:
ActionScript:
  1. static function MMply(m1:matrix, m2:matrix){
  2. ...
  3. }
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 26-07-2005, 20:38   #6 (permalink)
o_0
 
Benutzerbild von DoTheSinWave
 
Registriert seit: Apr 2005
Ort: zuhause
Beiträge: 79
Zitat:
static function MMply(m1:matrix, m2:matrix){
funzt nicht, ich bekomme folgende meldung:Instance variables cannot be accessed in static functions.
DoTheSinWave ist offline   Mit Zitat antworten
Alt 26-07-2005, 20:42   #7 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
die zuweisung stimmt so...
du kannst deiner matrix-klasse auch eine toString methode geben, um die werte anzuzeigen

ActionScript:
  1. function toString(){
  2. return array[0][0] +"\\t"+ array[0][1] +"\\t"+ array[0][2] + "\\n"+ array[1][0] +"\\t"+ ...;
  3. }

die art wie du matrizen multiplizierst müsste auf den ersten blick stimmen.
mein 4x4 Matrix-Mply algo für die 3D Engine sieht so aus:
ActionScript:
  1. for(j=1;j<=4;j++){
  2. for(i=1;i<=4;i++){
  3. MTemp["_"+i+""+j] = 0;
  4. for(n=1;n<=4;n++){
  5. MTemp["_"+i+""+j] += M1["_"+i+""+n] * M2["_"+n+""+j];
  6. }
  7. }
  8. }

mfg
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 26-07-2005, 20:54   #8 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Zitat:
Zitat von DoTheSinWave
funzt nicht, ich bekomme folgende meldung:Instance variables cannot be accessed in static functions.
ja... spricht für sich selbst!
statische funktionen können auf keine variablen zugreifen die in einer instanz deklariert werden...

also alle vars die du ein er function benutzt (hor, vert, i, multi, m1, m2) müssen in der funktion deklariert werden, oder auch statisch (dann bleiben die werte erhalten!) oder als parameter übergeben werden.

dh. so müsste es gehn: (alle vars in der function deklariert)
ActionScript:
  1. static function MMply(m1:matrix, m2:matrix) {
  2. var hor, vert, i, multi = new Array();
  3. for (hor=0; hor<3; hor++) {
  4. for (vert=0; vert<3; vert++) {
  5. for (i=0; i<3; i++) {
  6. multi[hor][vert] += m1[hor][i]*m2[vert][i];
  7. }
  8. }
  9. }
  10. return multi;
  11. }

da fällt mir auf, du hast multi gar nicht gesetzt, wenn du darauf zugreifen willst...
also:
[as]multi = new Array();[as]

die deklarationen dieser vars in der klasse kannst du weg lassen!
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 26-07-2005, 21:00   #9 (permalink)
o_0
 
Benutzerbild von DoTheSinWave
 
Registriert seit: Apr 2005
Ort: zuhause
Beiträge: 79
so schaut jetzt die fla aus:
ActionScript:
  1. m1 = new matrix();
  2. m1.array = [[1, 1, 1], [1, 1, 1], [1, 1, 1]];
  3. m2 = new matrix();
  4. m2.array = [[2, 2, 2], [2, 2, 2], [2, 2, 2]];
  5.  
  6. trace(toString())
bei der klasse ist das dazugekommen:
ActionScript:
  1. function toString() {
  2.         return array[0][0]+"\t"+array[0][1]+"\t"+array[0][2]+"\n"+array[1][0]+"\t"+array[1][1]+"\t"+array[1][2]+"\n"+array[2][0]+"\t"+array[2][1]+"\t"+array[2][2];
  3.     }

trotzdem ergibt trace(toString()) "[object Object]"

ich habs mal hochgeladen:hier

edit: du warst schneller... ich schau gleich nach

Geändert von DoTheSinWave (26-07-2005 um 21:02 Uhr)
DoTheSinWave ist offline   Mit Zitat antworten
Alt 26-07-2005, 21:03   #10 (permalink)
robo kalkühl
Gast
 
Beiträge: n/a
Zitat:
Zitat von DoTheSinWave
...bei der klasse ist das dazugekommen...
aber wenn du in der fla die function tostring aufrufst, weiß er so ja nicht, das die in der klasse gemeint ist.
also dann auch
ActionScript:
  1. m1.toString();
schreiben...
  Mit Zitat antworten
Alt 26-07-2005, 21:03   #11 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
toString() is eine methode der klasse! also instanz angeben!
trace(m1.toString());

aber da trace ja einen string verlangt, kannst du das toString weglassen (ist schon in der seehr tiefen Object class angegeben)

also nur
trace(m1);

müsste auch den text aus der toString methode ausgeben
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 26-07-2005, 21:10   #12 (permalink)
o_0
 
Benutzerbild von DoTheSinWave
 
Registriert seit: Apr 2005
Ort: zuhause
Beiträge: 79
thx erst mal für die schnellen antworten - die Ausgabe der Matrix funzt bereits^^
bis morgen dann
mfgDTSW
DoTheSinWave 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 06:53 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele