-
Flash Optimization Tips
I am very new at making flash games, infact starting my first one only a month ago. However as I have gotten further and further along, I am having some FPS drops, especially in slower machines. Basically, my 2.4 Ghz Computer with 1 GB Memory and a 64 MB Graphics Accelerator is topping out at 38 FPS. A 450 Mhz Computer with 312 MB Memory is topping out at 4 FPS. I notice people have talked about optimizing code for a faster FPS. How do you do that. Below are the game and .fla
Game = http://www.sfhq.net/sfhq/flashgame.swf
Game FPS Test = http://www.sfhq.net/flashtutorials/fpstest3.swf
Game FLA = http://www.sfhq.net/sfhq/flashgame.fla
Also could a few people run Game FPS Test and post the framerate it displays along with there machine specs. Note the limit is currently 40 FPS. Thanks.
Below Is The Code For The Moving Objects
Last edited by Admiral_Ames; 03-27-2003 at 10:55 AM.
-
onClipEvent(enterFrame){
if(_root.primary <100)
_root.primary += 0.01;
}
onClipEvent(enterFrame){
_root.sshield.moveMovieClip (sshield);
_root.sshield._x = _root.non._x;
_root.sshield._y = _root.non._y;
_root.sshield._rotation = _root.non._rotation;
}
onClipEvent(enterFrame) {
for(i = 0; i <100; ++i) {
if(this.hitTest(_root["disruptor"+i])) {
shipVel=0
removeMovieClip (_root["disruptor"+i]);
if (_root.shield2>0) {
_root.sshield.moveMovieClip (sshield);
_root.sshield._x = this._x;
_root.sshield._y = this._y;
_root.sshield._rotation = this._rotation;
_root.shield2 -= 5;
}if (_root.shield2<1) {
_root.life2 -= 10;
_root.sshield.moveMovieClip (sshield);
_root.sshield._x = _root.non._x;
_root.sshield._y = _root.non._y;
_root.sshield._rotation = _root.non._rotation;
}
if (_root.life2 < 1 && _root.sovereign._currentframe == 1) {
_root.sovereign.gotoAndPlay( 2 );
_root.impulseh = 0;
_root.primary = 0;
_root.secondary = 0;
}
}}}
onClipEvent(enterFrame) {
for(i = 0; i <80; ++i) {
if(this.hitTest(_root["rtorpedo"+i])) {
shipVel=0
removeMovieClip (_root["rtorpedo"+i]);
if (_root.shield2>0) {
_root.sshield.moveMovieClip (sshield);
_root.sshield._x = this._x;
_root.sshield._y = this._y;
_root.sshield._rotation = this._rotation;
_root.shield2 -= 10;
}if (_root.shield2<1) {
_root.life2 -= 20;
_root.sshield.moveMovieClip (sshield);
_root.sshield._x = _root.non._x;
_root.sshield._y = _root.non._y;
_root.sshield._rotation = _root.non._rotation;
}
if (_root.life2 < 1 && _root.sovereign._currentframe == 1) {
_root.sovereign.gotoAndPlay( 2 );
_root.impulseh = 0;
_root.primary = 0;
_root.secondary = 0;}
}}}
onClipEvent (enterFrame) {
if (this.hitTest(_root.valdore)) {
shipVel=0
if (_root.shield2>0) {
_root.sshield.moveMovieClip (sshield);
_root.sshield._x = this._x;
_root.sshield._y = this._y;
_root.sshield._rotation = this._rotation;
_root.shield2 -= 1;
}if (_root.shield2<1) {
_root.life2 -= 1;
_root.sshield.moveMovieClip (sshield);
_root.sshield._x = _root.non._x;
_root.sshield._y = _root.non._y;
_root.sshield._rotation = _root.non._rotation;
}
if (_root.life2 < 1 && _root.sovereign._currentframe == 1) {
_root.sovereign.gotoAndPlay( 2 );
_root.impulseh = 0;
_root.primary = 0;
_root.secondary = 0;
}
}}
onClipEvent (load) {
_root.shipVel = shipVel;
_root.mph = Number(shipVel)*2;
_root.mph -= _root.mph%1;
if (_root.mph<1) {
_root.mph = 0;
}
if (_root.mph>25) {
_root.mph = 100;
}}
onClipEvent (load) {
this._rotation = 0;
// velocity of the Phaser when shot
vel = 5;
// translates between angle units
dtr = Math.PI / 180;
// ship's velocity
shipVel = 0;
incVel = .20;
incVel2 = .45;
stick = .975;
stick2 = 0;
}
onClipEvent (keyDown) {
// for rotating the ship
if (Key.isDown (Key.LEFT)) {
if (_root.impulseh > 0) {
rot = "left";
}} if (Key.isDown (Key.RIGHT)) {
if (_root.impulseh > 0) {
rot = "right";
} }
// for firing a Phaser
if (Key.isDown (Key.DELETEKEY)) {
shootPhaser ();
}
// for firing a Torpedo
if (Key.isDown (Key.END)) {
shootstorpedo ();
}
// for ship movement
if (Key.isDown (Key.UP)) {
if (_root.impulseh > 0) {
shipStatus = "forward";}
}else if (Key.isDown (Key.PGDN)) {
if (_root.impulseh > 0) {
shipStatus = "warp";}
} else if (Key.isDown (Key.DOWN)) {
if (_root.impulseh > 0) {
shipStatus = "backward";}
} else {
shipStatus = "nowhere";
}function shootPhaser () {
if (_root.primary>0) {
count++;
_root.Phaser.duplicateMovieClip ("Phaser"+1);
_root["Phaser"+1]._rotation = this._rotation;
_root["Phaser"+1].velx = vel * Math.cos (this._rotation * dtr);
_root["Phaser"+1].vely = vel * Math.sin (this._rotation * dtr);
_root["Phaser"+1]._x = this._x;
_root["Phaser"+1]._y = this._y;
_root.primary -= 1;
}}
function shootstorpedo () {
if (_root.secondary>0) {
count++;
_root.storpedo.duplicateMovieClip ("storpedo"+count, count);
_root["storpedo"+count]._rotation = this._rotation;
_root["storpedo"+count].velx = vel * Math.cos (this._rotation * dtr);
_root["storpedo"+count].vely = vel * Math.sin (this._rotation * dtr);
_root["storpedo"+count]._x = this._x;
_root["storpedo"+count]._y = this._y;
_root.secondary -= 1;
}}}
onClipEvent (keyUp) {
// ship rotation
if (Key.getCode () == Key.LEFT || Key.getCode () == Key.RIGHT) {
rot = "neither";
}
// ship movement
if (Key.getCode () == Key.DOWN || Key.getCode () == Key.UP) {
shipStatus = "nowhere";
}
}
onClipEvent (enterFrame) {
if (rot == "left") {
this._rotation -= 1.45;
} if (rot == "right") {
this._rotation += 1.45;
}
if (shipStatus == "forward") {
shipVel += incVel;
} if (shipStatus == "warp") {
shipVel += incVel2;
}else if (shipStatus == "backward") {
shipVel -= incVel;
}
vx = shipVel * Math.cos (this._rotation * dtr);
vy = shipVel * Math.sin (this._rotation * dtr);
this._x += vx;
this._y += vy;
if (this._x > 1000) {
this._x = 0;
} else if (this._x < 0) {
this._x = 1000;
}
if (this._y > 680) {
this._y = 0;
} else if (this._y < 0) {
this._y = 680;
}
shipVel *= stick;
}
Last edited by Admiral_Ames; 03-27-2003 at 10:47 AM.
-
Senior Member
PIII 750
128 meg ram
TNT2 32 meg
Average FPS of about 21 - 22 based on past 50 frames.
The future belongs to those who prepare for it today.
-
Vox
i'd started a thread called "Optimization tips" Search for it
-
I have read the thread and I am wondering what "Flip Flop" means. I think it refers to having an action called every second frame.
-
Flash Developer on a break
That code..
Let me count your amount of hitTests().
181 every enterFrame!!! Try to or get that number down, or use an alternative hittesting method.
| "Keep Flashing!"-Jeroen
PHP multiplayer? Check this thread: PHPgateway
-
Thats why I am wondering if you can have code called every second frame instead of every frame.
-
Originally posted by jeroen84
181 every enterFrame!!!
Don't forget there is another object although its hittest count is only 82
-
Okay, I have removed the 40FPS "Speed Limit" so it now tops out at 120 although with the current code, nobody will ever get it to go that fast.
I have also determined the problem is with my hittest code which is currently checking way to many hittests.
Does anyone know of a better way to run hittest if the most distruptor bolts ever on screen at the same time will be aprox 10 or even if there is a way to hittest with a variable.
-
Vox
You can also use an array. Suppose you have baddie1, baddie2, baddie3, baddie4 etc...
so:
for (x;x<no_of_baddies;x++){
if (goodguy.hittest( _root["baddie" + x]){
other code here}}
-
Okay, I will try that.
Also, is there anyway to duplicate a movieclip with the code. What I was going to try is to have the hittest code in the disruptor so it would only have to hittest 1 object. Problem is that as soon as a movie is duplicated, it looses its actionscript.
-
Is the array not similar to what I have in my existing code
for(i = 0; i <100; ++i) {
if(this.hitTest(_root["disruptor"+i])) {
-
Vox
It probably loses its actionscript because the duplicate has the same instance name. Sorry I cant open your FLA, I have MX on my other comp. but Flash 5 on this one
-
Here is a flash5 copy although it slightly predates the above, it is mostly the same.
http://www.sfhq.net/sfhq/flashgame5.fla
-
Hype over content...
A couple of posts late ( Busy day ) but yeah a flip flop is just a way of running code every other frame.
Just set up a var and if it's true set it false and run function a, if it's false change it to true and run function b.
Hope that's some help.
Squize.
-
OKAY, with much editing I have cut down on the code and sped up the game a lot. But for some reason, the code removeMovieClip (this);
only works with the duplicated movie clips and not the original. Basically the problem is that as soon as the game stars, the torpedo that is to be duplicated from moves towards the ship it is supposed to track. I don't want it to do this until its been duplicated but its not responding to anything including hittest, removemovieclip, etc. until after it has been duplicated.
onClipEvent (load) {
if (this._name == "storpedo") {
this._visible = false;
}
}
onClipEvent (enterframe) {
//x movement
mx=_root.sovereign._x;
if (mx<_x) {
dx=_x-mx;
}
else {
dx=mx-_x;
}
moveSpeedx=dx/48;
if (mx<_x) {
_x=_x-moveSpeedx;
}
else {
_x=_x+moveSpeedx;
}
//y movement
my=_root.sovereign._y;
if (my<_y) {
dx=_y-my;
}
else {
dx=my-_y;
}
moveSpeedx=dx/48;
if (my<_y) {
_y=_y-moveSpeedx;
}
else {
_y=_y+moveSpeedx;
}
}
onClipEvent(enterFrame){
if (this.hitTest(_root.sovereign)) {
removeMovieClip (this);
if(_root.shield2>0){
_root.shield2 -= 5;
_root.sovereign.gotoAndPlay(83);
}if (_root.shield2<1) {
_root.life2 -= 10;
}
if (_root.life2 < 1 && _root.sovereign._currentframe == 1) {
_root.sovereign.gotoAndPlay( 2 );
_root.impulseh = 0;
_root.primary = 0;
_root.secondary = 0;
}
}}
Last edited by Admiral_Ames; 03-27-2003 at 10:02 PM.
-
Vox
Removemovieclip() NEVER works in the original (not for me, at least). The best you can do is move the original movieclip far, far away:
movieclip._y = 100000
-
Its okay, I figured out a better solution:
onClipEvent (enterframe) {
if (this._name == "storpedo") {
this._visible = false;
}
else {//x movement
mx=_root.valdore._x;
if (mx<_x) {
dx=_x-mx;
}
else {
dx=mx-_x;
}
moveSpeedx=dx/48;
if (mx<_x) {
_x=_x-moveSpeedx;
}
else {
_x=_x+moveSpeedx;
}
//y movement
my=_root.valdore._y;
if (my<_y) {
dx=_y-my;
}
else {
dx=my-_y;
}
moveSpeedx=dx/48;
if (my<_y) {
_y=_y-moveSpeedx;
}
else {
_y=_y+moveSpeedx;
}
}}
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|