Combat collisions

Talk about making games.

Combat collisions

Postby Fojam » Sat Jun 30, 2012 2:50 pm

I am making a combat/melee type game and i have noticed that the collisions dont always work well. I had an idea to write my own function that checks collisions everytime the drawActor event is called
Code: Select all
#define UP 1
#define RIGHT 2
#define DOWN 3
#define LEFT 4

int checkCollision(char*ccActor)
{
    Actor*playr=getclone(ccActor);
    int d=distance(x,y,playr->x,playr->y);
    int d2=0;
    int s=checkSide(ccActor);
    if((s==UP)||(s==DOWN))
    {
        d2=(height/2)+(playr->height/2);
    }
    else if((s==LEFT)||(s==RIGHT))
    {
        d2=(width/2)+(playr->width/2);
    }
    if(d2<=d)
    {
        return s;
    }
    return 0;
}

int checkSide(char*csActor)
{
    Actor*playr=getclone(csActor);
    double dir = direction(x,y,playr->x,playr->y);
    if((dir>=315)||(dir<=45))
    {
        return RIGHT;
    }
    else if((dir>=45)&&(dir<=135))
    {
        return UP;
    }
    else if((dir>=135)&&(dir<=225))
    {
        return LEFT;
    }
    else if((dir>=225)&&(dir<=315))
    {
        return DOWN;
    }
    return 0;
}


Would it be better to use this function or the built in collision event for my game? Also the game runs on an ipod and so i dont know if this would be stressful for that processor

Edit: i fixed a mistake i made. i had originally made this code for java so i had to change it a bit to work for GE
CLICK TO GIVE ME POINTS

My Latest Projects:
Super Smash Bros: viewtopic.php?f=6&t=12307 PLEASE help by making sprites!
User avatar
Fojam
 
Posts: 513
Joined: Thu Mar 19, 2009 10:02 pm
Location: under your bed!!!
Score: 69 Give a positive score

Re: Combat collisions

Postby Fojam » Sun Jul 01, 2012 1:50 pm

Also heres the thing i wrote for java. Java isnt as nice for game programming as GE and im currently taking a class in it at my school, so i wrote this to make my life easier
Code: Select all
import java.awt.*;
import java.util.*;
import java.awt.Image;

class Actor extends functions
{
    public int x, y, z, width, height;
    animation anim=null;
    int frameTime;
    public Actor()
    {
        x=0;
        y=0;
        z=0;
        width=1;
        height=1;
        frameTime=0;
    }
    public Actor(int x1,int y1,animation a,int w, int h)
    {
        CreateActor(x1,y1,a,w,h);
    }
    public void CreateActor(int x1, int y1, animation a, int w, int h)
    {
        x=x1;
        y=y1;
        z=0.5;
        width=w;
        height=h;
        frameTime=0;
        ChangeAnimation(a,"FORWARD");
    }
    public drawActor(int worldTime)
    {
        if(frameTime==0)
        {
            int addTime;
            addTime=100/anim.fps;
            frameTime=worldTime+addTime;
        }
        else if(frameTime<=worldTime)
        {
            int addTime;
            anim.nextFrame(x,y);
            addTime=100/anim.fps;
            frameTime=worldTime+addTime;
        }
        else
        {
            anim.drawFrame(x,y);
        }
    }
    public Boolean checkCollision(Actor a)
    {
        int d=distance(x,y,a.x,a.y);
        int d2;
        int s=checkSide(a);
        if((s==1)||(s==3)) //up down
        {
            d2=(height/2)+(a.height/2);
        }
        else //left right
        {
            d2=(width/2)+(a.width/2);
        }
        if(d2<=d)
        {
            return true;
        }
        return false;
    }
    public int checkSide(Actor a)
    {
        double dir = direction(x,y,a.x,a.y);
        if((dir>=315)||(dir<=45))
        {
            return 2; //right
        }
        else if((dir>=45)&&(dir<=135))
        {
            return 1; //up
        }
        else if((dir>=135)&&(dir<=225))
        {
            return 4; //left
        }
        else if((dir>=225)&&(dir<=315))
        {
            return 3; //down
        }
        return 0;
    }
    public void CreateActor(int x1, int y1, animation a, int w, int h)
    {
        x=x1;
        y=y1;
        z=0.5;
        width=w;
        height=h;
        ChangeAnimation(a,"FORWARD");
    }
    public void ChangeAnimation(animation a, String type)
    {
        if(type.equals("NO_CHANGE")
        {
            String aName=a.name;
            if(!(aName.equals(anim.name)))
            {
                anim=a;
                anim.drawFrame(0,x,y);
            }
        }
        else if(type.equals("STOPPED"))
        {
            anim=a;
            anim.drawFrame(0,x,y);
            anim.direction="STOPPED";
        }
        else if(type.equals("FORWARD"))
        {
            anim=a;
            anim.drawFrame(0,x,y);
            anim.direction="FORWARD";
        }
        else if(type.equals("BACKWARD"))
        {
            anim=a;
            anim.drawFrame(anim.frames,x,y);
            anim.direction="BACKWARD";
        }
    }
}

class animation
{
    public int frames;
    public int fps;
    public String names[100];
    public String name;
    public String direction;
    private int currentFrame;
    public animation(String n,int f,int speed)
    {
        name=n;
        frames=f-1;
        fps=speed;
        currentFrame=0;
        direction="FORWARD";
    }
    public void setFrame(int fNum, String fName)
    {
        names[fNum]=fName;
    }
    public void drawFrame(int x1, int y1)
    {
        boolean success;
        Image img = Toolkit.getDefaultToolkit().getImage(names[currentFrame]) ;
int w = img.getWidth(null);
int h = img.getHeight(null);
        x1=x1-(w/2);
        y1=y1-(h/2);
        success=Graphics.drawImage(img,x1,y1,null);
    }
    public void drawFrame(int fNum, int x1, int y1)
    {
        boolean success;
        Image img = Toolkit.getDefaultToolkit().getImage(names[fNum]) ;
int w = img.getWidth(null);
int h = img.getHeight(null);
        x1=x1-(w/2);
        y1=y1-(h/2);
        currentFrame=fNum;
        success=Graphics.drawImage(img,x1,y1,null);
    }
    public void nextFrame(int x1,int y1)
    {
        if(direction.equals("FORWARD"))
        {
            if(currentFrame>=frames)
            {
                currentFrame=0;
            }
            else
            {
                currentFrame+=1;
            }
        }
        else if(direction.equals("BACKWARD"))
        {
            if(currentFrame<=0)
            {
                currentFrame=frames;
            }
            else
            {
                currentFrame-=1;
            }
        }
        else if(direction.equals("STOPPED"))
        {
            currentFrame=currentFrame;
        }
        drawFrame(currentFrame,x1,y1);
    }
    public void setCurrentFrame(int fNum)
    {
        if((fNum<=frames)&&(fNum>=0))
        {
            currentFrame=fNum;
        }
        else
        {
            currentFrame=0;
        }
    }
}

class functions
{
    public double distance(int x1,int y1,int x2,int y2)
    {
        int x3=x2;
        int y3=y1;
        int L1=abs(x3-x1);
        int L2=abs(y3-y2);
        return (double)(Math.sqrt((L1*L1)+(L2*L2)));
    }
    public double direction(int x1, int y1, int x2, int y2)
    {
        double dir = Math.toDegrees(Math.atan2(y2-y1,x2-x1));
        return dir;
    }
}
CLICK TO GIVE ME POINTS

My Latest Projects:
Super Smash Bros: viewtopic.php?f=6&t=12307 PLEASE help by making sprites!
User avatar
Fojam
 
Posts: 513
Joined: Thu Mar 19, 2009 10:02 pm
Location: under your bed!!!
Score: 69 Give a positive score


Return to Game Development

Who is online

Users browsing this forum: No registered users and 1 guest