Avatar billede 4b4 Nybegynder
22. juli 2004 - 21:01 Der er 33 kommentarer og
1 løsning

Bounce scale

Nogen der ligger inde med et meget simpelt (el. hurtigt kan lave det) af en funktion hvorved man kan trykke på et movieclip, og så resizer det sig til ex. 200% med en elastisk bevægelse (bounce) .. friktion.. kender ikke lige det korrekte ord for det :)

skal selvfølgelig kunne resize sig tilbage til oprindelige størelse..

Sidder og leger med en menu jeg har lavet, og det her er lige hvad jeg mangler :)

Spørg endelig løs hvis i ikke helt forstår :)
Avatar billede mat Nybegynder
22. juli 2004 - 21:17 #1
frit hugget fra: http://www.actionscript.org/forums/archive/index.php3/t-8268.html

MovieClip.prototype.elasticScale = function(target, accel, convert) {
    step = step * accel + (target - this._xscale) * convert;
    this._xscale = this._yscale += step
}
// eksempel
clip.onEnterFrame = function() { // bouncing clippet hedder "clip"
    bounce ? this.elasticScale(200, .5, .6) : this.elasticScale(100, .5, .6);
}
btn.onRelease = function() { // knap til at bounce løs
    !bounce ? bounce = true : bounce = false;
}

...noget i den stil :)
Avatar billede kragekjaer Praktikant
22. juli 2004 - 23:34 #2
hej mat, kan du forklare denne til "normal dansk":

bounce ? this.elasticScale(200, .5, .6) : this.elasticScale(100, .5, .6);

Det er nu mere spørgsmåltegnet og kolon´et som skal forklares
Avatar billede thulstrup Nybegynder
22. juli 2004 - 23:55 #3
kragekjaer >> Det er bare en lidt nemmere måde at skrive nedenstående på:

if (bounce) {
    this.elasticScale(200, .5, .6);
} else {
    this.elasticScale(100, .5, .6);
}
Avatar billede thulstrup Nybegynder
22. juli 2004 - 23:57 #4
Jeg ville nok skrive:
bounce = !bounce

istedet for:
!bounce ? bounce=true : bounce=false;

, men det er vist ovre i småtings afdelingen :o)
Avatar billede barklund Nybegynder
23. juli 2004 - 00:12 #5
Og:

bounce ? this.elasticScale(200, .5, .6) : this.elasticScale(100, .5, .6);

Kan skrives som:

this.elasticScale(bounce ? 200 : 100, .5, .6);

Hvilket er lidt pænere at se på ;)

Men for at vende tilbage til spørgsmålet - bruger du Flash MX 2004 og Flash Player 7?
Avatar billede barklund Nybegynder
23. juli 2004 - 00:13 #6
Hov, det skulle ikke være et svar - undskyld :/
Avatar billede 4b4 Nybegynder
23. juli 2004 - 11:20 #7
Nu smadrer jeg sikkert det hele.. MX !...
Avatar billede mat Nybegynder
23. juli 2004 - 11:46 #8
nånånå, nu skal man osse til at cleane det hele op inden man poster? sikke nogle sibber ;)

4b4 > Ovenstående virker fint i mx
Avatar billede barklund Nybegynder
23. juli 2004 - 12:03 #9
For i Flash MX 2004 og Flash Player 7, der ligger det hele direkte indbygget! ;)

Du kan bruge Robert Penner's easing equations, som Macromedia fandt så interessante, at de ligger i mx.transitions.Tweens klassen og kan animere på mange forskellige måder.

Se denne lille finde tutorial: http://www.actionscript.org/tutorials/advanced/Tween-Easing_Classes_Documented/index.shtml

--
Morten Barklund
Avatar billede 4b4 Nybegynder
23. juli 2004 - 12:03 #10
mat.. puha.. tak.. var ved at blive lidt nervøs for jeres reaktion hvis hele skidtet nu var til 2004 :)
Avatar billede 4b4 Nybegynder
23. juli 2004 - 12:28 #11
erhmm...

fremgang:
1) laver et movieclip med instancename 'clip'
2) paster:

MovieClip.prototype.elasticScale = function(target, accel, convert) {
    step = step * accel + (target - this._xscale) * convert;
    this._xscale = this._yscale += step
}
// eksempel
clip.onEnterFrame = function() { // bouncing clippet hedder "clip"
    bounce ? this.elasticScale(200, .5, .6) : this.elasticScale(100, .5, .6);
}
btn.onRelease = function() { // knap til at bounce løs
    !bounce ? bounce = true : bounce = false;
}

I framekey 1.

3) Laver en knap med instancename 'btn'

virker ikke..
Avatar billede mat Nybegynder
23. juli 2004 - 12:33 #12
barklund > Det vidste jeg ikke, sejt! Jeg må se at få mig MX 2004...en dag :)

4b4 > Du skal trykke på knappen ;) - nej pjat, men det burde virke ud fra det du beskriver?
Avatar billede mat Nybegynder
23. juli 2004 - 12:46 #13
Du forveksler ikke instancenavne med symbolnavne? Instancenavne er dem du skriver i propertiesboksen, hvad symbolet hedder i library er ligegyldigt.

Den fine version:

MovieClip.prototype.elasticScale = function(target, accel, convert) {
    step = step * accel + (target - this._xscale) * convert;
    this._xscale = this._yscale += step
}
// eksempel
clip.onEnterFrame = function() { // bouncing clippet hedder "clip"
    this.elasticScale(bounce ? 200 : 100, .5, .6);
}
btn.onRelease = function() { // knap til at bounce løs
    bounce = !bounce;
}

;)
Avatar billede barklund Nybegynder
23. juli 2004 - 13:07 #14
Hm, variablen "step" genererer mig! Den er jo ikke definereret noget sted - ligger på framen. Den skal vel tilhørende det pågældende movieclip og dermed have this. foran. Og den initialiseres ikke til 0 - og ligger på movieclippet lige til at forurene :(

Jeg ville rydde lidt op i den og initialisere nogle variabler:

MovieClip.prototype.elasticScale = function(target, accel, convert) {
    if (this.$_step == undefined) this.$_step = 0;
    this.$_step = this.$_step * accel + (target - this._xscale) * convert;
    this._xscale = this._yscale += this.$_step
}
// eksempel
clip.onEnterFrame = function() { // bouncing clippet hedder "clip"
    this.elasticScale(bounce ? 200 : 100, .5, .6);
}
bounce = false;
btn.onRelease = function() { // knap til at bounce løs
    bounce = !bounce;
}

--
Morten Barklund
Avatar billede 4b4 Nybegynder
23. juli 2004 - 13:44 #15
Jeg er slet ikke med.. jeg er vandt til at man definerer functioner til et movieclips instancenavn ... ?
Avatar billede 4b4 Nybegynder
23. juli 2004 - 13:50 #16
ahh fik det til at virke
Avatar billede barklund Nybegynder
23. juli 2004 - 13:51 #17
Que? Hvad er du ikke med på?
Avatar billede barklund Nybegynder
23. juli 2004 - 13:52 #18
Oki :)
Avatar billede 4b4 Nybegynder
23. juli 2004 - 13:55 #19
Lidt mere avanceret.. hvad nu hvis jeg vil have mere en et clip som kan bounce med forskellige knapper ?
Avatar billede 4b4 Nybegynder
23. juli 2004 - 13:55 #20
og er det ikke et problem at den løkke kører hele tiden.. mth cpu ?
Avatar billede 4b4 Nybegynder
23. juli 2004 - 14:07 #21
flere movieclips med hver tilhørende knap der aktiverer bounce for hver enkelt.. (lille rettelse i sprgs)
Avatar billede barklund Nybegynder
23. juli 2004 - 14:31 #22
Hvordan skulle den ellers kunne bounce, hvis ikke den kørte hele tiden - den skal jo bevæge sig over flere frames. Men man kunne selvfølgelig godt droppe enterframen, når den var færdig.

Her udvidet til, at du kan have flere knapper til hver sit movieclip:

MovieClip.prototype.elasticScale = function(target, accel, convert) {
    if (this.$_step == undefined) this.$_step = 0;
    this.$_step = this.$_step * accel + (target - this._xscale) * convert;
    this._xscale = this._yscale += this.$_step
}
// eksempel
function setBounce(clip, b) {
    clip.current_bounce = b;
    clip.onEnterFrame = bounce;
}
function bounce() {
    this.elasticScale(this.current_bounce, .5, .6);
    if (Math.min(Math.abs(this.current_bounce - this._xscale),Math.abs(this.$_step)) < 0.1) {
        delete this.onEnterFrame;
    }
}
function bounceButton() { // funktion til knapper
    setBounce(this.clip, this.bounce = !this.bounce ? 200 : 100);
}
function setNewBounceButton(btn, clip) {
    btn.onRelease = bounceButton;
    btn.clip = clip;
    btn.bounce = false;
}
setNewBounceButton(btn_clip1, clip1); // btn_clip1 får clip1 til at bounce
setNewBounceButton(btn_clip2, clip2); // btn_clip2 får clip2 til at bounce

Det er skrevet lige ud i luften, men prøv ad :)

--
Morten Barklund
Avatar billede barklund Nybegynder
23. juli 2004 - 14:34 #23
Testede lige - den manglede sgu bare nogle parenteser:

MovieClip.prototype.elasticScale = function(target, accel, convert) {
    if (this.$_step == undefined) this.$_step = 0;
    this.$_step = this.$_step * accel + (target - this._xscale) * convert;
    this._xscale = this._yscale += this.$_step
}
// eksempel
function setBounce(clip, b) {
    clip.current_bounce = b;
    clip.onEnterFrame = bounce;
}
function bounce() {
    this.elasticScale(this.current_bounce, .5, .6);
    if (Math.min(Math.abs(this.current_bounce - this._xscale),Math.abs(this.$_step)) < 0.1) {
        delete this.onEnterFrame;
    }
}
function bounceButton() { // funktion til knapper
    setBounce(this.clip, (this.bounce = !this.bounce) ? 200 : 100);
}
function setNewBounceButton(btn, clip) {
    btn.onRelease = bounceButton;
    btn.clip = clip;
    btn.bounce = false;
}
setNewBounceButton(btn_clip1, clip1); // btn_clip1 får clip1 til at bounce
setNewBounceButton(btn_clip2, clip2); // btn_clip2 får clip2 til at bounce
Avatar billede 4b4 Nybegynder
23. juli 2004 - 14:56 #24
fantastisk !
Avatar billede 4b4 Nybegynder
23. juli 2004 - 17:28 #25
starter lige et nyt problem i et nyt sprgs..
Avatar billede 4b4 Nybegynder
23. juli 2004 - 17:32 #26
lige en ALLERSIDSTE ting..

hvis jeg ved click på min knap vil have ændret dybden på det movieclip knapper bouncer.. hvordan integrerer jeg det i scriptet ?

clip0,1,2,3....swapDepths(_root.topdepth);
Avatar billede 4b4 Nybegynder
23. juli 2004 - 18:20 #27
got it..
Avatar billede 4b4 Nybegynder
23. juli 2004 - 18:27 #28
err...

Hvis nu knapperne ikke ligger i _root .. (ex. hvis de ligger indeni hvert clip) så virker skidtet ikke.. har prøvet at ændre dette, dog uden held:

function setNewBounceButton(btn, clip) {
    clip.btn.onRelease = bounceButton;
    clip.btn.clip = clip;
    clip.btn.bounce = false;
}

hvorn pokker :/ :)
Avatar billede 4b4 Nybegynder
23. juli 2004 - 19:27 #29
hielfe :/
Avatar billede barklund Nybegynder
24. juli 2004 - 01:31 #30
Altså, du kan jo ikke bare digte et script og håbe, at det virker ;)

Du skal rette i linjen:

setNewBounceButton(btn_clip1, clip1);

Her skal btn_clip1 og clip1 blot være direkte stier til dine to movieclips. Har du flyttet dem ind i et movieclip, der hedder foobar, så skriver du:

setNewBounceButton(foobar.btn_clip1, foobar.clip1);

Og så virker det igen - hvis det hele altså stadig hænger sammen og dine scener er initialiseret og så videre ;)

--
Morten Barklund
Avatar billede 4b4 Nybegynder
24. juli 2004 - 17:05 #31
kan man bruge _global.btn_clip1 ?
Avatar billede barklund Nybegynder
24. juli 2004 - 20:57 #32
Ja, men det er der ingen grund til! Gør som ovennævnt og så bør det virke fint! Det ville være noget rod at smide det på global - især når det er ganske unødvendigt!
Avatar billede 4b4 Nybegynder
25. juli 2004 - 14:53 #33
okay så.. tak for hjælpen :)
Avatar billede barklund Nybegynder
25. juli 2004 - 16:30 #34
Og tark for points - håber det virker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester