vielleicht kennt ja jemand das tolle buch namens super samurai für flash. ich habe auf macromedia den artikel gefunden der beschreibt wie man einen 3d raum erstellt (
http://www.macromedia.com/devnet/mx/...urai_ch2.html). falls jemand mit diesem kapitel vertraut ist hätte ich eine frage und zwar folgende:
ich kenne das ganze script ziemlich gut und es ist auch ausführlich erklärt jedoch überfordern mich all die mathematischen erklärungen ein wenig und weiss nicht weiter. es geht darum dass wenn ich auf einen der button klicke sollte sich er sich zu diesem inhalt bewegen und wenn ich den selben button nochmals klicke sollte er zu der position bewegen wo sich das objekt befindet.
mein grösstest problem ist es die objekt an die genau position zu bewgen in x,y,z koordinaten und was ich auch noch möchte ist dass die bewegung gegen ende langsam abbremst.
ich poste hier mal das script vielleicht kann ja jemand etwas damit anfangen. ich wäre jedenfalls für jede hilfe sehr dankbar!
PHP-Code:
szeneBreite = Stage.width;
szeneHoehe = Stage.height;
initGrafik();
// grafik iniziialisieren
function initGrafik() {
// einstellen
zeit = 30;
abbremsung = 3;
D = 500;
abstand = 1000;
spielerHoehe = 0;
ursprungX = szeneBreite/2;
ursprungY = szeneHoehe/2;
anzahlObjekte = 0;
anzahlObjekteBeginn = 1;
// konstanten
trans = Math.PI/180;
translationAnstieg = 10;
translationX = 0;
translationZ = 0;
rotationAnstieg = 200;
rotationWinkelY = 0;
objektPosition = new Array();
// nur nötig wenn der array nicht automatisch erstellt wird
arrayBezeichnung = new Array("Home", "News", "Portfolio", "Locations", "Staff");
arrayLink = new Array("http://www.home.com", "http://www.news.com", "http://www.portfolio.com", "http://www.locations.com", "http://www.staff.com");
for (var i = 0; i<anzahlObjekteBeginn; i++) {
hinzufuegenGrafik();
}
//
navigationListener = new Object();
Key.addListener(navigationListener);
//renderGrafikIntervall = setInterval(renderGrafik, 50);
renderGrafik();
}
// grafik für neue abteilung hinzufügen
function hinzufuegenGrafik() {
_root.attachMovie("objekt", "objekt"+anzahlObjekte, anzahlObjekte);
_root["objekt"+anzahlObjekte]._visible = false;
//
objektPosition[anzahlObjekte] = new Object();
// übergebene variablen
objektPosition[anzahlObjekte].normaleGroesse = 100;
objektPosition[anzahlObjekte].id = anzahlObjekte;
objektPosition[anzahlObjekte].bezeichnung = arrayBezeichnung[anzahlObjekte];
objektPosition[anzahlObjekte].link = arrayLink[anzahlObjekte];
// übergebene positionen
objektPosition[anzahlObjekte].x = Math.random()*500-250;
objektPosition[anzahlObjekte].y = 0;
if (anzahlObjekte == 0) {
objektPosition[anzahlObjekte].z = D;
} else {
objektPosition[anzahlObjekte].z = -abstand+D;
}
objektPosition[anzahlObjekte].z;
//auf film anwenden
_root["objekt"+anzahlObjekte].textName.text = objektPosition[anzahlObjekte].bezeichnung;
_root["objekt"+anzahlObjekte].textUrl.text = objektPosition[anzahlObjekte].link;
//
anzahlObjekte++;
}
// zu neuer abteilung bewegen
function renderGrafik(objektNummer, richtung, objektName) {
_root.onEnterFrame = function() {
sinY = Math.sin(rotationWinkelY*trans);
cosY = Math.cos(rotationWinkelY*trans);
for (var j = 0; j<anzahlObjekte; j++) {
tx = objektPosition[j].x+translationX;
ty = objektPosition[j].y;
tz = objektPosition[j].z+translationZ;
rx = tx*cosY-tz*sinY;
ry = ty;
rz = tz*cosY+tx*sinY;
objektPosition[j].x = rx;
objektPosition[j].y = ry;
objektPosition[j].z = rz;
ry -= spielerHoehe;
rz -= D;
if (rz<-D) {
_root["objekt"+j]._visible = false;
} else {
perspektiveRate = D/(D+(rz));
perspektiveX = ursprungX+rx*perspektiveRate;
perspektiveY = ursprungY-ry*perspektiveRate;
perspektiveSkalierung = objektPosition[j].normaleGroesse*perspektiveRate;
if (((perspektiveX+perspektiveSkalierung)<(szeneBreite-bildschirmBreite)) || ((perspektiveX-perspektiveSkalierung)>bildschirmBreite)) {
_root["objekt"+j]._visible = false;
} else {
_root["objekt"+j]._visible = true;
_root["objekt"+j]._x = perspektiveX;
_root["objekt"+j]._y = perspektiveY;
_root["objekt"+j]._xscale = _root["objekt"+j]._yscale=perspektiveSkalierung;
_root["objekt"+j].swapDepths(-rz);
if (objektPosition[objektNummer].z<(D+1)) {
translationZ = 21.57;
trace(objektPosition[objektNummer].z)
} else if (objektPosition[objektNummer].z>(D+1)) {
translationZ = -21.57;
} else {
delete this.onEnterFrame;
}
}
}
}
};
}
// zu neuer abteilung wechseln
function wechselGrafik(objektName) {
if (this.aufgerufenId) {
var objektNummer = this.aufgerufenId;
} else {
this.aufgerufenId = anzahlObjekte;
var objektNummer = this.aufgerufenId;
hinzufuegenGrafik();
}
renderGrafik(objektNummer, richtung, objektName);
}
// knopf aktionen um die abteilungen aufzurufen
_root.knopf1.onRelease = wechselGrafik;
_root.knopf2.onRelease = wechselGrafik;
_root.knopf3.onRelease = wechselGrafik;