-
how to make bullets explode when they hit an enemy/object?
Hello, having issues with this.. I'll try to explain best I can.
I just need bullets to display an explosion effect when hitting an object/enemy. Right now they are just disappearing with removeMovieClip();.
Nothing happens when I tell the bullet to go to the next frame to display the explosion effect in its own movieclip, and I can't figure out how to create the effect and have it attach to the bullets last location when it hit something on the last stage.
Really need help!
-
you need to use attachMovie, and set attached movieClip coordinates as your bullet movieclip
-
Client Software Programmer
Ok the bullets array will store each bullet attached after pressing the shoot button, so each bullet will move forward +=20 x coordinate.
When a bullet from the bullets array hits the enemy, the mc will be moved to the exploding_bullets array & spliced out from bullets array.
If an mc in the exploding_bullets array reaches its final frame it will be removed from the exploding_bullets array & from the stage.
You can add more robot movieclips that get affected by bullets to the robots array.
PHP Code:
var bullets=[]
var exploding_bullets=[]
var index=-1;
var stageWidth=550;
shoot_btn.onPress=function(){
index++
attachMovie("bullet","bullet"+index,index);
bullets.push(_root["bullet"+index]);
_root["bullet"+index]._x=robot_1._x+robot_1._width+20
_root["bullet"+index]._y=robot_1._y+robot_1._height/2
_root["bullet"+index].gotoAndStop(1);
trace("adding bullet " + index);
}
var robots=[robot_2]
onEnterFrame=function(){
for(var j=0;j<robots.length;j++){
for(var i=0;i<bullets.length;i++){
bullets[i]._x+=20
if(bullets[i]._x>stageWidth+bullets[i]._width*3||bullets[i]._x<0-bullets[i]._width){
removeMovieClip(bullets[i]);
bullets.splice(i,1)
trace("removed bullet out of stage range");
}
if(robots[j].hitTest(bullets[i])){
exploding_bullets.push(bullets[i]);
bullets.splice(i,1)
exploding_bullets[exploding_bullets.length-1].gotoAndPlay(2);
trace("exploding bullet " + i);
}
}
}
for(var h=0;h<exploding_bullets.length;h++){
if(exploding_bullets[h]._currentframe==exploding_bullets[h]._totalFrames){
removeMovieClip(exploding_bullets[h]);
exploding_bullets.splice(h,1);
trace("removing exploded bullet " + h);
}
}
}
download 0.1
-
Originally Posted by Alex_Cherkasoff
you need to use attachMovie, and set attached movieClip coordinates as your bullet movieclip
I tried this. It doesn't seem to work because the bullets themselves are generated movieclips, all with unique names. Would you be able to throw some quick code my way doing it this way? Seems like the most
-
I can try this way but idk if it will work, the game is going to have hundreds of enemies, and I want the bullets to explode when hitting the ground also.
-
Client Software Programmer
Ok I added some angled shooting so that you can see the wall gets hit, I just added the wall to the begining of the robots array.
The angled function compares the _xmouse & _ymouse coordinates to the position of your robot which is called bullet_start_x & bullet_start_y, if you plan to update the position of the your robot you must repeat lines 7 & 8 to update them without var written.
When you do bg.onPress by clicking the stage, it stores the angle it the bullet should be at in the bullets_x & bullets_y arrays .
bg movieclip was locked & set as a separate layer which is the blue background.
PHP Code:
var bullets=[]
var bullets_x=[]
var bullets_y=[]
var exploding_bullets=[]
var index=-1;
var bullet_start_x=robot_1._x+robot_1._width+20;
var bullet_start_y=robot_1._y+robot_1._height/2
var mouse_down=false
bg.onPress=function(){
degrees=-angled(_root._xmouse,_root._ymouse);
var angle=degrees*(Math.PI/180);
var xposition=40* Math.sin(angle);
var yposition=40*Math.cos(angle);
index++
attachMovie("bullet","bullet"+index,index);
bullets.push(_root["bullet"+index]);
bullets_x.push(xposition)
bullets_y.push(yposition)
_root["bullet"+index]._x=bullet_start_x
_root["bullet"+index]._y=bullet_start_y
_root["bullet"+index].gotoAndStop(1);
trace("adding bullet " + index);
_root["bullet"+index]._rotation=degrees
}
var robots=[wall,robot_2]
onEnterFrame=function(){
for(var j=0;j<robots.length;j++){
for(var i=0;i<bullets.length;i++){
bullets[i]._x+=bullets_y[i]
bullets[i]._y+=bullets_x[i]
if(bullets[i]._x>width||bullets[i]._x<0||bullets[i]._y>height||bullets[i]._y<0){
removeMovieClip(bullets[i]);
bullets.splice(i,1)
bullets_x.splice(i,1)
bullets_y.splice(i,1)
trace("removed bullet out of stage range");
}
if(robots[j].hitTest(bullets[i])){
exploding_bullets.push(bullets[i]);
trace("exploding bullet " + bullets[i]);
bullets.splice(i,1)
bullets_x.splice(i,1)
bullets_y.splice(i,1)
exploding_bullets[exploding_bullets.length-1].gotoAndPlay(2);
}
}
}
for(var h=0;h<exploding_bullets.length;h++){
if(exploding_bullets[h]._currentframe==exploding_bullets[h]._totalFrames){
trace("removing exploded bullet " + exploding_bullets[h]);
removeMovieClip(exploding_bullets[h]);
exploding_bullets.splice(h,1);
}
}
}
function angled(mousex,mousey) {
var r=Math.atan2(bullet_start_x-_root._xmouse,bullet_start_y-_root._ymouse);
return(r*180/Math.PI+90)-Math.floor((r*180 /Math.PI+90)/360)*360
}
download 0.2
Last edited by AS3.0; 09-19-2022 at 02:01 AM.
-
Client Software Programmer
-
Unfortunately this method isn't going to work for me I think, because of the way I have it programmed (the hitTest code is not all on the main timeline, an is nested in the bullet mc).
I'm able to make the bullet go to an 'explode' frame and play an explosion animation there, but because the bullet is moving from code on the main timeline, the explosion keeps traveling.
There has to be a really simple way to do this!
-
I will literally pay someone to get this solved at this point!
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
|