Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-10-2006, 05:27   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 27
Question Rotation einer gekippten Fläche um die x-Achse

Hallo,

ich suche eine Möglichkeit, einen Stadtplan per AS zu kippen und gleichzeitig um die eigene x-Achse drehen zu lassen. Alle Beiträge zu diesem Thema haben mich irgendwie nicht richtig nach vorne gebracht und ich wäre wirklich sehr froh, wenn mir jemand einen Tip geben könnte. Vielen Dank!

Grüsse
fizzo
fizzo ist offline   Mit Zitat antworten
Alt 04-10-2006, 12:19   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
kippen (neigen) geht mit AS nicht.
d.h. ab flash 8 mit bitmaps und matrix-operationen

lege deine karte in das karten_mc (ich nenne das jetzt mal so).
und dieses mc in das kipp_mc

kipp_mc.karten_mc._rotation=30;
kipp_mc._yscale=50;



ansonsten: mal die suchfunktion benützen!
z.b.
verzerren/kippen per as?
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (04-10-2006 um 12:20 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 04-10-2006, 12:42   #3 (permalink)
Banned
 
Benutzerbild von ballaballa
 
Registriert seit: Sep 2006
Beiträge: 793
Zitat:
Zitat von hgseib Beitrag anzeigen
kippen (neigen) geht mit AS nicht.
d.h. ab flash 8 mit bitmaps und matrix-operationen
mumpitz.....

nur etwas tricky und ich weiss auch nie wie ich zum richtigen ergebniss komm

PHP-Code:
_level0.createEmptyMovieClip("container"_level0.getNextHighestDepth());
_level0.container.createEmptyMovieClip("rotation"_level0.getNextHighestDepth());
_level0.container.rotation.createEmptyMovieClip("neigung"_level0.getNextHighestDepth());
_level0.container.rotation.neigung.beginFill(0x0000FF30);
_level0.container.rotation.neigung.lineStyle(50xFF0000100);
_level0.container.rotation.neigung.moveTo(00);
_level0.container.rotation.neigung.lineTo(2000);
_level0.container.rotation.neigung.lineTo(200200);
_level0.container.rotation.neigung.lineTo(0200);
_level0.container.rotation.neigung.lineTo(00);
_level0.container.rotation.neigung.endFill();

this.onEnterFrame = function(){
if (
countit == undefined){
    
countit 0;
} else {
    
countit++;
}
if (
countit == 2){ 
delete this.onEnterFrame;
}
_level0.container.rotation.neigung._rotation 50;//neigung:)
_level0.container.rotation._height 200;
_level0.container.rotation._width 200;
_level0.container.rotation._rotation 50;//und rotation
_level0.container._x 300;
_level0.container._y 100;

wahrscheinlich eher ein bug als ein feature


edit... wer sich wundert .. ohne on enter frame gehts net ... noch son flashbug.... schön das man sie wenigstens kombinieren kann

Geändert von ballaballa (04-10-2006 um 12:51 Uhr)
ballaballa ist offline   Mit Zitat antworten
Alt 04-10-2006, 13:06   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..nur etwas tricky.."
das hatte ich ja auch geschrieben:
"..lege deine karte in das karten_mc (ich nenne das jetzt mal so).
und dieses mc in das kipp_mc.."

dennoch ist die flash8 variante doch etwas eleganter ;-)
Code:
import flash.geom.Matrix;
import flash.geom.Transform;
//
var kippX = -.3;
var myMatrix:Matrix = new Matrix(1, 0, kippX, 1, _root.karte_mc._x, _root.karte_mc._y);
//
var trans:Transform = new Transform(_root.karte_mc);
trans.matrix = myMatrix;
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 05-10-2006, 02:48   #5 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 27
kippen und rotieren

Vielen Dank für eure Antworten!

Das Ergebnis sieht allerdings noch sehr optimierungsbedürftig aus, weil das Kippen eine extreme Verzerrung zu bewirken scheint.
Kann man diese Verzerrung irgendwie vermeiden?

Das gewünschte Traumergebnis dieses Experiments habe ich
hier gesehen (unter Adresse):

http://www.reingold.de

Der verwendete Code in der Beispiel Fla sieht wie folgt aus:

Code:
import flash.geom.Matrix;
import flash.geom.Transform;

var kippX = 3;
var myMatrix:Matrix = new Matrix(1, 0, kippX, 1, _root.kipp_mc._x, _root.kipp_mc._y);
var trans:Transform = new Transform(_root.kipp_mc);

trans.matrix = myMatrix;

onEnterFrame = function() {
	_root.kipp_mc.karte_mc._rotation += 1;
}
Falls sich noch jemand für das Thema begeistern kann,
würde ich mich sehr über weitere Tipps freuen!

Vielen Dank und Grüsse
fizzo
Angehängte Dateien
Dateityp: zip kippen_rotieren.fla.zip (23,0 KB, 19x aufgerufen)

Geändert von fizzo (05-10-2006 um 02:50 Uhr)
fizzo ist offline   Mit Zitat antworten
Alt 05-10-2006, 06:41   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
*
Angehängte Dateien
Dateityp: zip kippen_rotieren.zip (5,8 KB, 49x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 05-10-2006, 07:08   #7 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 27
Thumbs up Vielen Dank!

Hallo hgseib!

Vielen Dank für die Hilfe! Die Lösung ist genial einfach,
man muss "nur" wissen wie es geht.

Interessant ist auch, auf wieviele unterschiedliche Lösungsansätze ich beim Durchforsten dieses Forums gestossen bin.
Aber diese Lösung hier scheint mir die beste für meine Zwecke zu sein.

Noch einmal vielen Dank!

grüsse
fizzo
fizzo ist offline   Mit Zitat antworten
Alt 06-10-2006, 14:06   #8 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 27
Koordinaten einzelner Punkte auf der Karte

Hallo,

verzweifelt versuche ich mir die _x und _y Koordinaten
einzelner Punkte auf der Karte ausgeben zu lassen.

Da sich die Karte dreht, verändern sich diese Koordinaten.
Mir allerdings werden immer dieselben _x und _y Werte ausgegeben.

Kennt hier jemand eine Lösung , wie ich z.B. einen Punkt auf der Karte mit einem mc markiere und die aktuellenen _x und _y Werte ermitteln kann?

Für einen Tipp oder Lösungsvorschlag bin ich wie
immer sehr dankbar!

grüsse
fizzo
fizzo ist offline   Mit Zitat antworten
Alt 06-10-2006, 15:01   #9 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
in der karte innen drinn herrscht ruhe. gedreht wird nur äusserlich.

jedes mc hat seinen eigenen nullpunkt. um koordinaten vom mc zur bühne zu berechnen gibts den befehl
localToGlobal

und umgekehrt:
globalToLocal

anwendungsbeispiele: in der flash-hilfe bzw. hier mal danach suchen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 10-10-2006, 03:10   #10 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 27
localToGlobal

Hallo und vielen Dank für die Antwort!

localToGlobal funktioniert wunderbar, nur leider mit einem einzelnen Punkt:
Code:
onEnterFrame = function() {
	
	var pt1:Object = {x:_root.mc_master.plan_mc.t1._x, y:_root.mc_master.plan_mc.t1._y};
		
	_root.mc_master.plan_mc.localToGlobal(pt1);

	_root.ht1._x = pt1.x;
	_root.ht1._y = pt1.y;
	
}
Sobald ich die Koordinaten mehrerer Punkte zu ermitteln versuche, scheitert das leider:
Code:
onEnterFrame = function() {
	
	var pt1:Object = {x:_root.mc_master.plan_mc.t1._x, y:_root.mc_master.plan_mc.t1._y};
	var pt2:Object = {x:_root.mc_master.plan_mc.t2._x, y:_root.mc_master.plan_mc.t2._y};
	
	_root.mc_master.plan_mc.localToGlobal(pt1);
	_root.mc_master.plan_mc.localToGlobal(pt2);
	_root.ht1._x = pt1.x;
	_root.ht1._y = pt1.y;
	
	_root.ht2._x = pt2.x;
	_root.ht2._y = pt2.y;
	
}
Leider weiß ich nicht, wo hier der Fehler in der Programmierung liegt.
Vielleicht weiß jemand weiter?

grüsse
fizzo
fizzo ist offline   Mit Zitat antworten
Alt 10-10-2006, 04:43   #11 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
es gibt ein localToGlobal und ein globalToLocal.

aber kein xxxToyyy

p={x:0,y:0}
_root.mc_master.plan_mc.t1.localToGlobal(p);
_root.mc_master.plan_mc.globalToLocal(p);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 10-10-2006, 05:46   #12 (permalink)
Neuer User
 
Registriert seit: Aug 2006
Beiträge: 27
thx!

nochmals danke für die antwort.
mein fehler lag woanders und ist gelöst.

ziel war es, zwei waagerechte linien
(ht1 und ht2) über zwei punkte in der karte zu positionieren.
der fehler lag darin, dass ich den nullpunkt der linien unterschiedlich festgelegt hatte, so dass das ergebnis falsch aussah, aber eigentlich richtig war.

Code:
var pt1:Object = {x:60, y:-3};
_root.plan_mc.localToGlobal(pt1);
_root.ht1._x = pt1.x;
_root.ht1._y = pt1.y;
	
var pt2:Object = {x:0, y:-30};
_root.plan_mc.localToGlobal(pt2);
_root.ht2._x = pt2.x;
_root.ht2._y = pt2.y;
ohne die hilfe von hgseib hätte ich es allerdings nicht geschafft.

daher: vielen vielen dank!

grüsse

fizzo
fizzo 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 03:29 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele