By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
432,537 Members | 1,750 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 432,537 IT Pros & Developers. It's quick & easy.

How to create a video background using frames and timer?

sword117
P: 35
Im trying to create a video background using frames from a video, and using a timer to run the frames 30FPS , can someone help me out? its for a school project.

im here so far, i can make this work with a trackbar, but using a timer to automatically refresh the background 30FPS would be a lot more cool =).

Expand|Select|Wrap|Line Numbers
  1.  
  2.  
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Windows.Forms;
  11. using System.Diagnostics;
  12. using System.Threading;
  13.  
  14. namespace MyClock
  15. {
  16.     public partial class Form1 : Form
  17.     {
  18.         public Form1()
  19.         {
  20.             InitializeComponent();
  21.  
  22.         }
  23.  
  24.  
  25.  
  26.         private void Form1_Load(object sender, EventArgs e)
  27.         {
  28.             Text = "My Clock";
  29.         }
  30.  
  31.         private void timer1_Tick(object sender, EventArgs e)
  32.         {
  33.             //timer1.Interval = 1000;
  34.             //FPS set up
  35.             double FPS = 30.0;
  36.  
  37.             timer1.Interval = Convert.ToInt32(FPS);
  38.  
  39.              Image[] images = new Image[2003];
  40.              for (int i = 1; i < 10; i++)
  41.              {
  42.                  images[i] = Image.FromFile(@"C:\Users\Sword Master\Desktop\New folder (6)\PS3 Background Waves Attempt HD (08-07-2010 23-45-07)\PS3 Background Waves Attempt HD 000" + i + ".jpg");
  43.                  this.BackgroundImage = images[i];
  44.              }
  45.            //test if the timer works
  46.             label2.Text = DateTime.Now.ToLongTimeString();
  47.         }
  48.  
  49.     }
  50. }
  51.  
  52.  
Jul 15 '10 #1

✓ answered by GaryTexmo

im using 2003 images, and i want to show them, but if i dont get to control the speed that they are showed i dont see the images, thats why i created a for, but im only doing it to 10 just like a test drive.

I say 30FPS because it shows 30 frames a second, i see in games that the img flows right, and im trying too do that, it actualy doesnt need to be 30FPS, just the speed need to flow nomal.

but thanks again =)
Like I said, think about what frames per second actually means. That's the number of frames shown in a second. This value is easily converted to how many seconds we show each frame...

30 frames per seconds --> 1/30 seconds per frame, this is 33.33 milliseconds per frame. There's a place on your timer exactly for this.

Now what does your timer need to do? It needs to advance your frame counter, then update the drawing. In your case, the background image.

With the code you've posted, you'll never see more than 10 images cycle and only when the user scrolls the track bar. Keep on with the timer, you'll get there :D Just think about it and before you know it, you'll have one of those "oooooooh" moments.

By the way, it just so happens that about a year ago I did almost exactly this with a little animation from Mega Man X. You're welcome to see the code, but I'm going to make you figure this out first ;) Trust me, you'll be happier for it.

Share this Question
Share on Google+
33 Replies


GaryTexmo
Expert 100+
P: 1,501
We can't really do your homework for you, but we can help you out.

What question specifically do you have about a timer?

Here's something to try... on your form, drop down a timer. Set the interval to say, 1000 (milliseconds, 1 second). Attach a handler to the tick event and put something visible in there, maybe a Console.WriteLine("Ticked!");

Hopefully that's enough hint to get you started :)
Jul 15 '10 #2

sword117
P: 35
@GaryTexmo
=) okay i already done that, but my question here is more like how do i put the timer to search the image[i] and show the images on a speed of 30 FPS, but my main problem is how to say that on the timer1_tick(like the interval), i really dont know where to start, i tried everything that i found on google and still had no results,please give me a light =)
Jul 15 '10 #3

GaryTexmo
Expert 100+
P: 1,501
Two things...

1) If you want to run through an image in an array, you'd going to need some kind of counter, right? A class member variable might be appropriate here... What I mean by this is, what is images[i]? You're accessing it via a for loop, right? Well, you kind of want to replace your for loop with the timer itself...

2) What does FPS actually mean? Frames per second. If you had 30 frames per second, how many seconds would it be per frame? Where on the timer can you enter an amount relating to seconds?

(Hopefully that nudges ya in the right direction. You've clearly stated what you want to do, you've just gotta play around with a timer to learn how you can use it to your advantage.)
Jul 15 '10 #4

sword117
P: 35
@GaryTexmo
im using 2003 images, and i want to show them, but if i dont get to control the speed that they are showed i dont see the images, thats why i created a for, but im only doing it to 10 just like a test drive.

I say 30FPS because it shows 30 frames a second, i see in games that the img flows right, and im trying too do that, it actualy doesnt need to be 30FPS, just the speed need to flow nomal.

but thanks again =)
Jul 16 '10 #5

sword117
P: 35
@sword117
Hello again =) i managed to what i want with a scrool bar, but i cannot control the trackbar value... so i thinked of the timer.

here is the code to create a flow of images.

Expand|Select|Wrap|Line Numbers
  1.   private void trackBar1_Scroll_1(object sender, EventArgs e)
  2.         {
  3.              Image[] images = new Image[2003];
  4.                 for (int i = 1; i < 10; i++)
  5.                 {
  6.                     images[i] = Image.FromFile(@"C:\Users\Sword Master\Desktop\New folder (6)\PS3 Background Waves Attempt HD (08-07-2010 23-45-07)\PS3 Background Waves Attempt HD 000" + i + ".jpg");
  7.  
  8.                     if (trackBar1.Value == i)
  9.                     {
  10.                         this.BackgroundImage = images[i];
  11.                     }
  12.  
  13.                 }
  14.                 label1.Text = trackBar1.Value.ToString();
  15.  
  16.         }
Jul 16 '10 #6

GaryTexmo
Expert 100+
P: 1,501
im using 2003 images, and i want to show them, but if i dont get to control the speed that they are showed i dont see the images, thats why i created a for, but im only doing it to 10 just like a test drive.

I say 30FPS because it shows 30 frames a second, i see in games that the img flows right, and im trying too do that, it actualy doesnt need to be 30FPS, just the speed need to flow nomal.

but thanks again =)
Like I said, think about what frames per second actually means. That's the number of frames shown in a second. This value is easily converted to how many seconds we show each frame...

30 frames per seconds --> 1/30 seconds per frame, this is 33.33 milliseconds per frame. There's a place on your timer exactly for this.

Now what does your timer need to do? It needs to advance your frame counter, then update the drawing. In your case, the background image.

With the code you've posted, you'll never see more than 10 images cycle and only when the user scrolls the track bar. Keep on with the timer, you'll get there :D Just think about it and before you know it, you'll have one of those "oooooooh" moments.

By the way, it just so happens that about a year ago I did almost exactly this with a little animation from Mega Man X. You're welcome to see the code, but I'm going to make you figure this out first ;) Trust me, you'll be happier for it.
Jul 16 '10 #7

sword117
P: 35
@GaryTexmo
Thank you very much! =) i made it lol
but now i have another problem, the form becomes unusable when i click it, or move it, button´s dont work...

i saw in the toolbox the background worker, if i put this code there will i be able to click on the form?

thanks a lot =)

Expand|Select|Wrap|Line Numbers
  1. private void timer1_Tick(object sender, EventArgs e)
  2.         {
  3.  
  4.             Image[] images = new Image[2003];
  5.             timer1.Interval = 1000 / 30;
  6.  
  7.             for (int i = 32; i <= 2001; i++)
  8.             {
  9.                 if (i <= 2001)
  10.                 {
  11.                     this.Refresh();
  12.                     images[i] = Image.FromFile(@"C:\Users\Sword Master\Desktop\New folder (6)\PS3 Background Waves Attempt HD (08-07-2010 23-45-07)\1 (" + i + ").jpg");
  13.                     this.BackgroundImage = images[i];
  14.                     label2.Text = i.ToString();
  15.  
  16.  
  17.                 }
  18.                 else
  19.                 {
  20.                     return;
  21.                 }
  22.  
  23.             }
  24.  
  25.         }
Jul 16 '10 #8

GaryTexmo
Expert 100+
P: 1,501
You're close, but not quite there :)

Take a look at what you're doing in your timer tick method. Every 33.33 milliseconds you're setting the timer tick to 33.33 milliseconds, then you're looping through every image in the list.

You do not need to do this. Your timer's tick method is what changes the drawn image. Read: You do not need the for loop at all.

Also, preload all your images into the image array in the constructor or form load event. Putting it in the timer tick event makes things very slow as every 33 milliseconds you're loading a file from the hard drive.

Let me try to put this another way. Your tick event just puts an image in the background. The tick happens whenever the timer's interval expires. The interval controls the framerate of the image drawing.
Jul 16 '10 #9

sword117
P: 35
@GaryTexmo
i think i didnt understand you well xD

is it close to this? lol

Expand|Select|Wrap|Line Numbers
  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             Text = "My Clock";
  4.             MyClock();
  5.  
  6.         }
  7.  
  8.         public void MyClock()
  9.         {
  10.             Image[] images = new Image[2003];
  11.             for (int i = 32; i <= 2001; i++)
  12.             {
  13.                 images[1] = Image.FromFile(@"Images\1 (" + i + ").jpg");
  14.                 this.BackgroundImage = images[i];
  15.                 label2.Text = i.ToString();
  16.  
  17.             }
  18.         }
  19.  
  20.         private void timer1_Tick(object sender, EventArgs e)
  21.         {
  22.              timer1.Interval = 1000 / 30;
  23.              this.Refresh();
  24.         }
  25.  
Jul 17 '10 #10

GaryTexmo
Expert 100+
P: 1,501
How come literally all of your data is local to the method? How come you don't use any class member variables?

http://msdn.microsoft.com/en-us/libr...8VS.71%29.aspx

Doing it like you are, everything you allocate gets destroyed as soon as you leave the method. Wouldn't it make more sense to allocate the images to a class member so that other methods could access them?

Expand|Select|Wrap|Line Numbers
  1. public class MyClass
  2. {
  3.   private Image[] images = new Image[2003];
  4.  
  5.   public MyClass()
  6.   {
  7.     // load images[...]
  8.   }
  9.  
  10.   public void SomeMethod()
  11.   {
  12.     // this method can now access images[...]
  13.   }
  14. }
Your timer will tick every Interval, so why are you setting the interval again every time it ticks? You can set it once and it will not change until set elsewhere.

Lastly, think about what you want to do. You want to set an image to your background every X seconds such that the background will appear to animate. So why aren't you doing that? Your timer's tick method will go ahead and tick every 1000/30 seconds on and on, so what should you do in there to make your image animate?

What else do you need to keep track of what image is currently being shown? (Hint: See above... I've also said you need this in several posts above)

Keep at it, you're getting there. Just think about what you need and what you have.

You need your image changed every X seconds so that your background animates. You have a method that happens every X seconds.
Jul 17 '10 #11

sword117
P: 35
is this right? i cant see the background..

Expand|Select|Wrap|Line Numbers
  1. public class Myclass
  2.         {
  3.            private Image[] images = new Image[2003];
  4.  
  5.             public Myclass()
  6.             {
  7.  
  8.                 for (int i = 1; i <= 440; i++)
  9.                 {
  10.                     images[i] = Image.FromFile(@"Images\1 (" + i + ").jpg");
  11.                 }
  12.  
  13.             }
  14.  
  15.             public void MyClock()
  16.             {
  17.                 Form1 form1 = new Form1();
  18.                 for (int i = 1; i <= 440; i++)
  19.                 {
  20.                     form1.BackgroundImage = images[i];
  21.                     form1.Refresh();
  22.                 }
  23.             }
  24.  

ive searched all over the web and i didnt find how to put timer count the this.background= images[];
im really desperate. please help =)
Jul 20 '10 #12

GaryTexmo
Expert 100+
P: 1,501
ive searched all over the web and i didnt find how to put timer count the this.background= images[];
im really desperate. please help =)
What's stopping you from doing this...

Expand|Select|Wrap|Line Numbers
  1. public class Blah : Form
  2. {
  3.   private int m_currentFrame = 0;
  4.   private Image[] m_images = new Image[2003];
  5.  
  6.   ...
  7.  
  8.   public void Timer_Tick(...)
  9.   {
  10.     this.BackgroundImage = m_images[m_currentFrame];
  11.  
  12.     m_currentFrame++;
  13.     if (m_currentFrame > m_images.Length) m_currentFrame = 0;
  14.   }
  15. }
Jul 20 '10 #14

sword117
P: 35
thank you very much! youre a life saver!!!
thanks x 1 million!!!

best regards =)


heres the final code =)

Expand|Select|Wrap|Line Numbers
  1.  private int m_countframe = 1;
  2.         private Image[] m_images = new Image[2003];
  3.  
  4.     private void timer1_Tick(object sender, EventArgs e)
  5.             {
  6.  
  7.  
  8.                 timer1.Interval = 1000 / 30;
  9.  
  10.                 this.BackgroundImage = m_images[m_countframe];
  11.                 m_countframe++;
  12.                 m_images[m_countframe] = Image.FromFile(@"Images\1 (" + m_countframe + ").jpg");
  13.                 if (m_countframe > m_images.Length) m_countframe = 1;
  14. }
Jul 22 '10 #15

GaryTexmo
Expert 100+
P: 1,501
Glad you got it working :)

I would still preload all your images in the constructor or form_load event first so you're not doing a disk read every cycle though. A disk read is very slow. If they're all precached in the array, you're just changing the reference to existing memory... ie, fast ;)
Jul 22 '10 #16

sword117
P: 35
@GaryTexmo
OMG XD how do i preload the images in the form_load? xD
Jul 22 '10 #17

GaryTexmo
Expert 100+
P: 1,501
Well, you were already doing it in the constructor (see your post... #12), I'm not sure why you took it out. I don't see any reason why you couldn't just move that code to a form_load event instead if you wanted to do it there...
Jul 22 '10 #18

sword117
P: 35
@GaryTexmo
so i did this but it doesnt work. i copy the code from post 12 but the program doesnt even open..
how should i put the code?

Expand|Select|Wrap|Line Numbers
  1.     private int CountFrames = 1;
  2.         private Image[] Frames = new Image[5191];
  3.         private void Form1_Load(object sender, EventArgs e)
  4.         {
  5.             Text = "My Clock";
  6.  
  7.             Frames[CountFrames] = Image.FromFile(@"Frames\1 (" + CountFrames + ").jpg");
  8.  
  9.         }
  10.  
  11.  
  12.         private void timer1_Tick(object sender, EventArgs e)
  13.         {
  14.             timer1.Interval = 1000 / 30;
  15.             CountFrames++;
  16.  
  17.             this.BackgroundImage = Frames[CountFrames];
  18.             if (CountFrames > Frames.Length) CountFrames = 1;
  19.  
  20. }
Jul 22 '10 #19

GaryTexmo
Expert 100+
P: 1,501
That's not the code from the constructor in post 12 at all. Look again.
Jul 22 '10 #20

sword117
P: 35
okay i got this, but it becomes very slow and the form takes a lot of time to appear, and the timer1.interval doesnt seem to apply to the timer...

Expand|Select|Wrap|Line Numbers
  1. public partial class Form1 : Form
  2.     {
  3.  
  4.  
  5.         private int CountFrames = 1;
  6.         private Image[] Frames = new Image[5191];
  7.  
  8.  
  9.         public Form1()
  10.         {
  11.             InitializeComponent();
  12.  
  13.             for (int i = 1; i <= 5190; i++)
  14.             {
  15.                 Frames[i] = Image.FromFile(@"Frames\1 (" + i + ").jpg");
  16.             }
  17.  
  18.         }
  19.  
  20.  
  21.         private void Form1_Load(object sender, EventArgs e)
  22.         {
  23.             Text = "My Clock";
  24.         }
  25.  
  26.  
  27.         private void timer1_Tick(object sender, EventArgs e)
  28.         {
  29.             timer1.Interval = 1000 / 30;
  30.             CountFrames++;
  31.  
  32.             this.BackgroundImage = Frames[CountFrames];
  33.             if (CountFrames > Frames.Length) CountFrames = 1;
  34.             progressBar1.Value = CountFrames;
  35.             label1.Text = CountFrames + "%";
  36.         }
  37.  
  38.     }
Jul 22 '10 #21

sword117
P: 35
and when i execute the program it has 3.279.108k on task manager..

theres any solucion possible for reducing the memory?
Jul 22 '10 #22

sword117
P: 35
@GaryTexmo
okay i got this, but it becomes very slow and the form takes a lot of time to appear, and the timer1.interval doesnt seem to apply to the timer.

and still when i execute the program it has 3.279.108k on task manager ,theres any solucion possible for reducing the memory? =)

Expand|Select|Wrap|Line Numbers
  1.  public partial class Form1 : Form
  2.         {
  3.  
  4.  
  5.             private int CountFrames = 1;
  6.             private Image[] Frames = new Image[5191];
  7.  
  8.  
  9.            public Form1()
  10.           {
  11.                InitializeComponent();
  12.  
  13.                for (int i = 1; i <= 5190; i++)
  14.                {
  15.                    Frames[i] = Image.FromFile(@"Frames\1 (" + i + ").jpg");
  16.                }
  17.  
  18.            }
  19.  
  20.  
  21.            private void Form1_Load(object sender, EventArgs e)
  22.            {
  23.                Text = "My Clock";
  24.            }
  25.  
  26.  
  27.            private void timer1_Tick(object sender, EventArgs e)
  28.            {
  29.                timer1.Interval = 1000 / 30;
  30.                CountFrames++;
  31.  
  32.                this.BackgroundImage = Frames[CountFrames];
  33.                if (CountFrames > Frames.Length) CountFrames = 1;
  34.                progressBar1.Value = CountFrames;
  35.                label1.Text = CountFrames + "%";
  36.            }
  37.  
  38.        }
  39.  
  40.  
Jul 22 '10 #23

GaryTexmo
Expert 100+
P: 1,501
It's taking a lot of time to appear 'cause you're loading roughly 5200 images from the hard drive into memory. There's going to be a delay, the plus side is that now front-loaded and happens once per image. You're no longer loading the image from disk over and over every time you change the frame.

If you're concerned about this, you could always use a background worker to "buffer" the files and start playing as you're loading them from the disk. I don't mean to offend, but given what I've seen you do from this thread I think this might be a bit above your current abilities. Unless you have some pressing need to avoid the load delay at the start, just leave it. Otherwise you'll have to research background workers and threading, which you're free to do but it'll be some work :)

As for the timer not happening in the correct interval, your code looks right. Technically you don't need to set the timer interval over and over every timer tick (once in the constructor or designer is sufficient).

I actually plugged your code in and it's working fine. Did you create a new timer and forget to link up the tick event and/or enable it?
Jul 22 '10 #24

sword117
P: 35
@GaryTexmo
well i only started c# about 8 months in the school, and my teacher doesnt teach us very much, so youre right, but im trying to learn all that i can, because i want to be a good programmer and thats my way of the ninja xD

but no i didnt create a new timer, i will search the web for the background worker. =) then if i dont know what to do im gonna create another post. thanks to you i learned new things and you have my thanks and best regards =)
Jul 22 '10 #25

GaryTexmo
Expert 100+
P: 1,501
Yea, don't take that to mean you shouldn't try, just that it may not be good to try just yet. Build your skills, then take a crack at it after. Sometimes it's best not to overwhelm yourself by trying to do too much at once.

Of course, if you're in for it you're in for it ;)

Regarding the timer, are you sure you didn't disable it somehow? I copy/pasted your code into a new project. I commented out the image stuff and just updated a progress bar/label with the counter. It worked just fine for me once I hooked the timer up to the timer_tick method. Make sure you check the events pane in the designer view for your timer. Also make sure enabled is set to true.

If your timer isn't working and everything is hooked up properly, then I'm not sure what the problem is. If you're still having trouble with it, post your designer file along with your source file and I can look.

Glad you learned something, good luck with the buffering if you do dive in :)
Jul 22 '10 #26

sword117
P: 35
@GaryTexmo
sorry for the delay, but finally here is my project =)

http://www.mediafire.com/file/pq4cqc...lc/MyClock.rar
Jul 23 '10 #27

GaryTexmo
Expert 100+
P: 1,501
Ok, so I ran your code and the timer actually worked just fine for me. Not sure what problem you're having.

The problem I had was that it does indeed take a while to load and a ton of memory. I actually couldn't load the whole thing because my system doesn't have enough memory, which seems quite odd 'cause those pictures are only 34kb and 1000 images brings me up over 1gb.

I'm guessing there's a whole bunch of overhead associated with the image class, which is rather unfortunate actually.

What I also don't get is when I do this, as the program runs, the memory footprint actually decreases over time. Yea, I have no idea.

Actually, a bit of googling turned this up:
http://bytes.com/topic/net/answers/8...es-using-timer

I guess that when they're loaded into memory, they get uncompressed and are turned into bitmaps, hence the huge memory consumption. I don't get why the memory footprint decreases over time, but w/e.

Anyway, it turns out that I was wrong here. Apparently it's better to load it straight from the hard drive when needed... go figure! That's what I get for trying to be all efficient and whatnot.

You can remove the Image array and just load the image from the counter as you require it. My apologies for steering you in the wrong direction here!
Jul 23 '10 #28

sword117
P: 35
@GaryTexmo
lol you dont need apologies, im very grateful for your help =)
Jul 23 '10 #29

sword117
P: 35
@GaryTexmo
i got another problem that i didnt notice... when the image reaches the end it gives an error that the index was outside of the bounds of the array..

what can i do? =)

the current code is this(its the same that you got).
Expand|Select|Wrap|Line Numbers
  1.    private int m_countframe = 1;
  2.         private Image[] m_images = new Image[2003];
  3.  
  4.         private void timer1_Tick(object sender, EventArgs e)
  5.         {
  6.             timer1.Interval = 1000 / 30;
  7.             m_countframe++;
  8.             m_images[m_countframe] = Image.FromFile(@"Images\1 (" + m_countframe + ").jpg");
  9.             this.BackgroundImage = m_images[m_countframe];
  10.             if (m_countframe > m_images.Length) m_countframe = 1;
  11.  
  12.       //progressBar1 Value 
  13.             progressBar1.Value = m_countframe;
  14.       //label1 Text
  15.             label2.Text = m_countframe + "%";
  16.  
  17.       //time
  18.             double hour = DateTime.Now.Hour;
  19.             double min = DateTime.Now.Minute;
  20.             double sec = DateTime.Now.Second;
  21.  
  22.             if (hour <= 13)
  23.             {
  24.                 label1.Text = hour + ":" + min + ":" + sec + "am";
  25.             }
  26.             if (hour >= 13)
  27.             {
  28.                 label1.Text = hour + ":" + min + ":" + sec + "pm";
  29.             }
  30.  
  31.  
  32.  
  33.  
  34.         }
  35.  
Jul 23 '10 #30

GaryTexmo
Expert 100+
P: 1,501
Arrays are zero indexed in C#, which means the first item in the array starts from zero.

So...

Expand|Select|Wrap|Line Numbers
  1. string[] strArray = new string[] { "a", "b", "c", "d" };
strArray[0] == "a"
strArray[1] == "b"
... and so on ...

So when you start from 1, you're skipping the first iamge. Then when you access the max value, you're out of bounds.

You need to access from 0 to max value - 1.

Hope that helps.
Jul 24 '10 #31

sword117
P: 35
@GaryTexmo
is this correct?

Expand|Select|Wrap|Line Numbers
  1.  
  2.           private void timer1_Tick(object sender, EventArgs e)
  3.         {
  4. CountFrames++;
  5.  
  6.             if (CountFrames >= Frames.Length)
  7.             {
  8.                 CountFrames = 0;
  9.             }
  10.             else
  11.             {
  12.                 Frames[CountFrames] = Image.FromFile(@"Frames\1 (" + CountFrames + ").jpg");
  13.                 this.BackgroundImage = Frames[CountFrames];
  14.             }
  15. }
  16.  
Jul 24 '10 #32

GaryTexmo
Expert 100+
P: 1,501
You can skip the array entirely now. Just do...

Expand|Select|Wrap|Line Numbers
  1. this.BackgroundImage = Image.FromFile(@"Frames\1 (" + (CountFrames + 1).ToString() + ").jpg);
You need the CountFrames + 1 because I noticed your image files start at 1, not 0.

I suppose you could also just do the count from 1 to MAX_FRAMES if you're not doing the array ;)
Jul 24 '10 #33

sword117
P: 35
@GaryTexmo
it worked =) i didnt know that i could use "+(CountFrames + 1).toString() +". one more thing that i learned lol
thanks again =)
Jul 24 '10 #34

Post your reply

Sign in to post your reply or Sign up for a free account.