Huub,

Sorry, I got mixed up about the frame numbers. I meant it went to the right 
between 50 and 100. You can see what my swftools installation outputs at: 
www.peachcobbler.uni.cc/changenegativebug.swf

I haven't been able to test it on 0.9 since I'm using windows and can't get it 
to compile.

Huub Schaeks <[EMAIL PROTECTED]> wrote:    .hmmessage P { margin:0px; 
padding:0px } body.hmmessage { FONT-SIZE: 10pt; FONT-FAMILY:Tahoma }   Jon

Looking at your example .sc file the box should move to the left between frame 
1 and frame 50 then just a little bit more to the left until frame 100 then 
just a little back to the right until frame 150 and to the right again back to 
it's starting position. If I read your description correctly that is exactly 
what it does.

The code you would like to patch actually works correctly. If I insert your 
numbers I find:
p.x = (2 - 1) * 0.5 + 1 = 1.5
p.x = (-1.5 - (-1)) * 0.5 + (-1) = -1.25

There are some situations where the interpolation will fail in version 0.8.1 
(resulting in some jittering).
Please use a more recent build than version 0.8.1 if possible. The 
interpolation code for changing properties of objects in swfc has been 
completely replaced.

Thanks for your time and effort.

Regards,
Huub


---------------------------------
Date: Sun, 6 Apr 2008 19:21:09 -0700
From: [EMAIL PROTECTED]
To: [email protected]
Subject: [Swftools-common] Bug in 0.8.1 with negative x/y changes < 1

First, thanks to Matthias and the rest of the coders for making swftools. It's 
the most useful open-source software I've found for making flash files.

--bug:--

I've found that when you specify e.g.: ".change (object) x=-1.5" that it's 
actually animated to where -0.5 would be on the x axis.

Example code:

.flash name="changenegativebug.swf" fps=50
.box b1 10 10 fill=white color=white
.put b1 x=0
.frame 50
.change b1 x=-3
.frame 100
.change b1 x=-3.5
.frame 150
.change b1 x=-3
.frame 200
.change b1 x=0
.end

Instead of moving the box just a little to the left between frames 100 and 150, 
it moves it to the right.

--problem:--

I do some programming (mostly web programming -- PHP, CSS, HTML...) but I 
looked through the source code for 0.8.1 and I'm guessing that this is the 
problem is in swfc.c in the "parameters_t s_interpolate" function. (Lines 1856 
& 1857) The current code  is:

    p.x = (p2->x-p1->x)*ratio + p1->x;
    p.y = (p2->y-p1->y)*ratio + p1->y;

so:
if p2->x = 2 and p1->x = 1 and ratio=0.5 then p.x = 1.5
if p2->x = -1.5 and p1-> = -1 and ratio=0.5 then p.x = -0.75 (!)

--patch:--

I don't do any C programming, and this is probably not the most elegant 
solution, but it demonstrates (I think) how to fix it:

if ((p2->x-p1->x)*ratio<0) {
  p.x = (p2->x-p1->x)*ratio*-1 + p1->x;
} else {
  p.x = (p2->x-p1->x)*ratio + p1->x;
}
if ((p2->y-p1->y)*ratio<0) {
   p.y = (p2->y-p1->y)*ratio*-1 + p1->y;
 } else {
   p.y = (p2->y-p1->y)*ratio + p1->y;
 }


Hopefully this very verbose (maybe too verbose) bug report helps.


Thanks again for the awesome swf tools.
Jon
         

---------------------------------
You rock. That's why Blockbuster's offering you one month of Blockbuster Total 
Access, No Cost.

---------------------------------
Lees jij al je Hotmail op je mobiel? Probeer het nu!
 
       
---------------------------------
You rock. That's why Blockbuster's offering you one month of Blockbuster Total 
Access, No Cost.

Reply via email to