Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-04-2007, 20:01   #1 (permalink)
jgd
Neuer User
 
Registriert seit: Sep 2004
Beiträge: 53
Hin-und-her skalieren

Hi Leute!

Ich komme hier nicht weiter... Versuche ein Skript zu schreiben, das einen MovieClip hochskaliert und, wenn er die Endgröße erreicht hat, wieder kleiner macht.

Das ist hier mein Ansatz:

PHP-Code:
MovieClip.prototype.skalieren = function (zielBreitezielHoehespeed){
    
// jetzt größer werden
    
this._xscale this._xscale + (zielBreite this._xscale)/speed;
    
this._yscale this._yscale + (zielHoehe this._yscale)/speed;
        
    
//wenn er bei der Endgröße ankommt
    
if ((this._xscale == zielBreite) && (this._yscale == zielHoehe)){
        
smaller 1;; //soll das ganze kleiner werden
    
}
}


MovieClip.prototype.zurueck = function (){
    
this._xscale this._xscale + (100 this._xscale)/6;
    
this._yscale this._yscale + (100 this._yscale)/6;
}


//die function für den MovieClip
_root.clip.onEnterFrame = function (){
    
this.skalieren(200,200,4);
    
    
//wenn smaller=1 kleiner werden mit zurueck
    
if (smaller ==) {
        
this.zurueck();
    }

Aber irgendwie will er nicht wieder kleiner werden...Woran liegt denn das???

Danke im Voraus!

Gruß
Jewgeni
jgd ist offline   Mit Zitat antworten
Alt 14-04-2007, 20:48   #2 (permalink)
jgd
Neuer User
 
Registriert seit: Sep 2004
Beiträge: 53
Jawwohl! :-) jetzt hat's geklappt :-)

PHP-Code:
bigger 1;

MovieClip.prototype.skalieren = function (zielBreitezielHoehespeed){
    if(
bigger == 1){
        if(
this._xscale zielBreite-1){
            
// jetzt größer werden
            
this._xscale this._xscale + (zielBreite this._xscale)/speed;
            
this._yscale this._yscale + (zielHoehe this._yscale)/speed;
        }    
        
//wenn er bei der Endgröße ankommt
        
else{
            
bigger 0//soll das ganze kleiner werden
        
}
    }
    else{
        
smaller 1;
    }
}



MovieClip.prototype.zurueck = function (){
    
this._xscale this._xscale + (100 this._xscale)/10;
    
this._yscale this._yscale + (100 this._yscale)/10;
}


//die function für den MovieClip
_root.clip.onEnterFrame = function (){
    
this.skalieren(200,200,2);
    
    
//wenn smaller=1 kleiner werden mit scaleBack
    
if (smaller == ) {
        
this.zurueck();
    }

jgd ist offline   Mit Zitat antworten
Alt 14-04-2007, 21:12   #3 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Servus
Nur so ne Idee!
PHP-Code:
var true;
MovieClip.prototype.mover = function(hwspeed)
{
    
this;
    
shrink setInterval(function ()
    {
        
m._height += ((h-Math.round(m._height))/speed);
        
m._width += ((w-Math.round(m._width))/speed);
        if (
Math.round(m._height) == && Math.round(m._width) == w)
        {
            
clearInterval(shrink);
            
switcher();
        }
        
updateAfterEvent();
    }, 
10);
};
function 
switcher()
{
    
= !i;
    
== true test_mc.mover(30030010) : test_mc.mover(10010010);
}
switcher(); 
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 14-04-2007, 23:10   #4 (permalink)
jgd
Neuer User
 
Registriert seit: Sep 2004
Beiträge: 53
Hi!

Cool, das ist ja super fließend! Ich steige zwar noch nicht ganz dahinter, aber das ist viel besser als mein ruckel-clip :-). Danke!

Kann man eigentlich irgendwie machen,dass für "h" und "w" nach jedem Skalieren neue Werte vergeben werden? Sodass der MC mal größer und kleiner und ganz groß und mittelgroß usw wird? evtl mit random?

Was ich gerade versuche, ist ein Array mit counter, aber das will nicht :-(. Hier ein Test:

PHP-Code:
var xWert:Array = new Array(200,150,230,100);
var 
counter:Number 0;

zielBreite xWert[_level0.counter];

button.onRelease = function(){ 
   
_level0.counter ++; 
   
trace(zielBreite);
  

Dieses _level0.counter ++; addiert die Zahl nicht beim Klicken, sie bleibt immer die selbe! Woran liegt das?

Vielen Dank!

Gruß
Jewgeni
jgd ist offline   Mit Zitat antworten
Alt 16-04-2007, 22:29   #5 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Servus
Ist zwar jetzt nimmer AS1, aber Du hast ja angefangen
PHP-Code:
/////////////////////////////////////Problem_1////////////////////////////////////
var i:Boolean true;
var 
maxW:Number 400;
var 
minW:Number 20;
MovieClip.prototype.mover = function(h:Numberw:Numberspeed:Number):Void 
{
    
this;
    
trace(this);
    
shrink setInterval(function ():Void
    
{
        
m._height += ((h-Math.round(m._height))/speed);
        
m._width += ((w-Math.round(m._width))/speed);
        if (
Math.round(m._height) == && Math.round(m._width) == w)
        {
            
clearInterval(shrink);
            
switcher();
        }
        
updateAfterEvent();
    }, 
10);
};
function 
switcher():Void
{
    
= !i;
    
trace(i);
    var 
v1:Number Math.floor(Math.random()*(maxW+1-minW));
    var 
v2:Number Math.floor(Math.random()*(maxW+1-minW));
    var 
v3:Number Math.floor(Math.random()*(maxW+1-minW));
    var 
v4:Number Math.floor(Math.random()*(maxW+1-minW));
    
trace("v1 = "+v1+" || v2 = "+v2+" || v3 = "+v3+" || v4 = "+v4);
    
== true test_mc.mover(v1v210) : test_mc.mover(v3v410);
}
switcher();
///////////////////////////////////Problem_2///////////////////////////////////////////
var xWert:Array = new Array(200150230100);
var 
counter:Number 0;
button_btn.onRelease = function()
{
    var 
zielBreite:Number xWert[counter];
    
trace(zielBreite);
    
_root.counter++;
}; 
Du mußt in der Veröffentlichung AS2 einstellen!!
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 26-04-2007, 12:32   #6 (permalink)
jgd
Neuer User
 
Registriert seit: Sep 2004
Beiträge: 53
Hi!
War jetzt länger nicht mehr da... Vielen Dank für die Hilfe! Ich werde das gleich mal ausprobieren . Wie geht denn dieses Veröffentlichen in AS2? Wo ich schon damit angefangen habe...
jgd ist offline   Mit Zitat antworten
Alt 26-04-2007, 12:49   #7 (permalink)
jgd
Neuer User
 
Registriert seit: Sep 2004
Beiträge: 53
Hi! Bin wieder da, habe das Skript gerade ausprobiert.

Es gibt allerdings noch einen Haken...

Bei Deinem Skript geht das Hin-und-Her-Ändern nicht unendlich lange, sondern hört ja mal nach 5 mal nach 2 mal nach 10 Schritten auf. Das ist mir auch passiert als ich mit folgendem Skript rumprobiert habe:

PHP-Code:
var true

MovieClip.prototype.mover = function(hwspeed

    
this
    
    
shrink setInterval(function () 
    { 
        
m._height += ((h-Math.round(m._height))/speed); 
        
m._width += ((w-Math.round(m._width))/speed); 
        
        
trace ("height" test_mc._height);
        
        if ((
Math.round(m._height) == )&& (Math.round(m._width) == w)) 
        { 
            
clearInterval(shrink); 
            
switcher(); 
        } 
        
        
updateAfterEvent(); 
    }, 
10); 
}; 

function 
switcher() 
{     
    
h1 120 random(60);
    
h2 200random (20);
    
w1 h1;
    
w2 h2;
    
    
= !i
    
== true test_mc.mover(h1w110) : test_mc.mover(h2w210); 
    
trace("h1" h1);
    
trace ("h2" h2);
    

switcher(); 
Irgendwie liegt's zumindest bei meiner Variante am Runden, glaube ich, denn immer bei bestimmten Endwerten (h1 oder h2) kommt Flash nicht über eine bestimmte Zahl hinaus und bleibt deshalb stecken...

Zum Beispiel bei der Zahl 201: hier kommt er nicht über die 199,55. Seltsam, oder? So ist's bei verschidenen Zahlen, das habe ich dann durch rumprobieren herausgefunden. Wie kann man denn das hinkriegen???

Schöne Grüße
Jewgeni
jgd ist offline   Mit Zitat antworten
Alt 28-04-2007, 21:02   #8 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Des mußt Du runden mit Math.floor, Math.round oder Math.ceil stehen alle in "F1" beschrieben!!
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 29-04-2007, 20:21   #9 (permalink)
jgd
Neuer User
 
Registriert seit: Sep 2004
Beiträge: 53
Hi!

Hab das mit dem Runden probiert, das ging aber triotzdem nicht. Der Logik nach sollte es schon, aber Flash macht was er will...

Egal, ich habe das jetzt anders gelöst, ist zwar nicht so elegant, aber funktioniert. Hier das Skript:

PHP-Code:
var true

MovieClip.prototype.mover = function(hwspeed

    
this
    
    
shrink setInterval(function () 
    { 
        
m._height += ((h-Math.ceil(m._height))/speed); 
        
m._width += ((w-Math.ceil(m._width))/speed); 
        
        
trace ("height" test_mc._height);
        
        if ((
Math.round(m._height) == )&& (Math.round(m._width) == w)) 
        { 
            
clearInterval(shrink); 
            
switcher(); 
        } 
        
        
///////////////das ist die "Korrektur"///////////////
        
else if(Math.floor(m._height) == (3)){
            
clearInterval(shrink);
            
switcher();
        }
        else if(
Math.round(m._height) == (3)){
            
clearInterval(shrink);
            
switcher();
        }
        
        
updateAfterEvent(); 
    }, 
30); 
}; 

function 
switcher() 
{     
    
h1 120 random(60);
    
h2 200random (20);
    
w1 h1;
    
w2 h2;
    
    
= !i
    
== true test_mc.mover(h1w130) : test_mc.mover(h2w230); 
    
trace("h1" h1);
    
trace ("h2" h2);
    

switcher(); 
So denn,
Jewgeni
jgd ist offline   Mit Zitat antworten
Alt 29-04-2007, 20:47   #10 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Ich weiß nicht, wie man sich immer noch mit solchen Tween-Geschichten und so selber einen abbrechen mag... Hier mal als 3-Zeiler, wenn man sich FuseKit besorgt hat:
PHP-Code:
import com.mosesSupposes.fuse.*;
ZigoEngine.simpleSetup(ShortcutsPennerEasing);

clip.tween("_scale""200"1"easeInOutSine"0, { functracescopethisargs: ["done"], cycles}); 
Tweent den Clip in 1 Sekunde auf seine doppelte Breite und Höhe, dann wieder zurück und gibt 'done' aus, wenn's durch is...
(Aber Achtung: auch AS 2!)

Servus Rusty!
sonar ist offline   Mit Zitat antworten
Alt 29-04-2007, 22:01   #11 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Muß ich Sonar zustimmen, geht auch mit den flasheigenen Tweens.

PHP-Code:
import mx.transitions.Tween;
import mx.transitions.easing.*;

var 
twX:Tween = new Tweenmc"_xscale"Regular.easeInOutmc._xscale2001true );
var 
twY:Tween = new Tweenmc"_yscale"Regular.easeInOutmc._yscale2001true );

twX.onMotionFinished = function(){
    
this.yoyo();
    
twY.yoyo()


Ok ist kein Dreizeiler.
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 30-04-2007, 08:28   #12 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Vorsicht psyk, die Flash-interne Twenn-Klasse ist in der Hinsicht absolut beschissen, dass sie - gerade wenn man 'yoyo' verwendet - Phantom-Intervalle hinterlässt..! (ja, das Ding arbeitet mit setInterval) Hatte sowas gerade bei nem aktuellen Projekt und hab's dann auf Fuse umgestellt, was wunderbar funktioniert hat.

Abgesehen davon geht dein 'yoyo' ja in nen Endlos-Loop... es sollte ja nur einmal hin- und wieder zurückskaliert werden, wenn ich das richtig verstehe. Das wäre dann eher 'Tween.rewind()'
sonar 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 16:10 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele