Results 1 to 2 of 2
  1. #1
    Harwad is offline Member
    Join Date
    Jan 2011
    Posts
    2
    Rep Power
    0

    Default Collision detection help.

    Hello, I am roughly new to java only working with it for a couple months or so and have started my first major program. It is basically a Ragdoll avalanche type game where you dodge falling objects to win. My trouble is I cant seem to get the Collision working between the falling objects, which are JLabels btw, and the character, which I drew.

    The character moves with the mouse and is drawn in its own class. I tried to use a rectangle method where I made a rectangle around the Objects falling and the characters head, which is a rectangle, but I just cant get it to work properly. I am hoping someone can help me figure out this collision problem with my application. I will be posting the classes which i use and hope someone can help me figure this out. Also any suggestions would be helpful.

    Also I cant upload all the pictures used but I used 50x50 Png pictures for the falling objects and a png for the background. Once again thanks for any help or advice

    The following is the class where the falling objects are created and are moved down the screen with a timer.
    Java Code:
    // Date    : January, 2011
    
    
    
    import javax.swing.*;
    import java.awt.*;
    import java.util.Random;
    import java.awt.event.*;
    
     public class PlayDodgeEm
    {
    	Random number = new Random();
    	JFrame Gameframe = new JFrame("Dodge Em Game");
    	Icon ObjectPicture;
    	//Creates the array of falling objects.
    	Icon[] FallingObjects = new Icon[4];
    	//creates the array that holds how many objects will fall.
    	JLabel[] CurrentObject = new JLabel[30];
    	JLabel Score = new JLabel("");
    	//decleration of multiple varialbes that will be used.
    	int XPos, YPos;
    	int ScoreCounter;
    	int counter = 0;
    	boolean collide, IsHead;
    	public Rectangle Head;
    	public Rectangle Object;
    	int x1, y1, x2, y2;
    
    	PlayDodgeEmPanel pane = new PlayDodgeEmPanel();
    
    
    
    
    
    
    	public PlayDodgeEm() {
    
    
          	Gameframe.getContentPane().add(pane);
          	//Sets the layout of the panel to null.
    		pane.setLayout(null);
    
    		//Adds the pictures to the array
    		FallingObjects[0] = new ImageIcon(getClass().getResource("FlowerPot.png"));
     	 	FallingObjects[1] = new ImageIcon(getClass().getResource("Anvil.png"));
    		FallingObjects[2] = new ImageIcon(getClass().getResource("Computer.png"));
    	 	FallingObjects[3] = new ImageIcon(getClass().getResource("ToolBox.png"));
    
    		//Sets the default operation to close.
    		Gameframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE  );
    		//Sets the size of teh screen.
    		Gameframe.setSize(720, 640);
    		//Sets resizable to false.
          	Gameframe.setResizable(false);
          	//Packs the screen to fit.
    		Gameframe.pack();
    		//Sets the visibility to true.
          	Gameframe.setVisible(true);
          	//sets gameover to false.
          	//Calls the method pick Picture
          	PickPicture();
          	//Calls the method XPOsition
    		XPosition();
    		pane.add(Score);
    		//Creates a time with 70 miliseconds intervals and uses the actionListener MovingObjects
    		Timer t = new Timer (10, MovingObjects);
    		//starts the timer.
    		t.start();
    
    
    
    	}
    
    	public void AddPicture (){
    		//This method is used to add the picture to the pane with a randomly set X value.
    		//Adds the picteur to the pane.
    		//A try catch statement is used in case of an Index out of bounds exception in the array
    		try{
    			pane.add(CurrentObject[counter]);
    		}catch(ArrayIndexOutOfBoundsException exception){
    
    		}
    
    	}
    
    	//This action listener is called with every tick of the timer which is set to 10 milisecond intervals
    
     	ActionListener MovingObjects = new ActionListener()
          {
          public void actionPerformed(ActionEvent evt)
             {
    
    			//If the YPos is greater than 600...
             	if(YPos > 600){
             	//Increment counter
    			AddScore();
             	counter ++;
             	//if counter equals 31 ...
             	if (counter == 31){
    			//the frame visibility is set to false
    			Gameframe.setVisible(false);
    			//calls the GAmeoverFrame class;
    			GameoverFrame GameOver = new GameoverFrame();
             	}else {
             	//Ypos is reset to -20
             	YPos = -20;
             	//CAlls method PIck Picture
        	    PickPicture();
        	    //calls method XPosition
    			XPosition();
             	}
    
    
             	}
    			//Calsl method AddPicture
    			AddPicture();
    			//Calls method YPosition
    			YPosition();
    
    			//calls method PictureMove.
    			PictureMove();
    
    
    
    
    
    
    		PlayDodgeEmDraw SendCords = new PlayDodgeEmDraw(XPos, YPos);
    
    
    
    
             }
          };
    
    	public void PickPicture(){
    		//This method is used to randomly choose the image of the next falling object
    		//A ramdom number is generated between 4 and 1
    		int PicNum = number.nextInt(3 - 0 + 1) + 0;
    		//ObjectPicture stores the picture randomly chosen
    		ObjectPicture = FallingObjects[PicNum];
    		//Adds the chosen picture into the array CurrentObject.
    		//A try catch statement is used in case of an Index out of bounds exception in the array
    		try{
    			CurrentObject[counter] = new JLabel (ObjectPicture);
    		}catch(ArrayIndexOutOfBoundsException exception){
    
    		}
    }
    
    
    	public void YPosition(){
    		//This method is used to continuelly change the YPos variable which is used to for the Y Position of the picture
    		//Increments the YPos variable by 10.
    		YPos = YPos + 20;
    	}
    	public void XPosition(){
    		//This method is used to randomly assigne the XPos variable with a value.
    		//XPos is set to a random value between 700 and 1.
    		XPos = number.nextInt(600 - 1 + 1) + 1;
    		//Xpos is then added by 20 to create a space.
    		XPos = XPos + 20;
    
    	}
    	public void PictureMove(){
    		//This method is used to move the picture on the screen with teh specified Xpos and YPos variables.
    
    		//Sets the new bounds of the current picture.
    		//A try catch statement is used in case of an Index out of bounds exception in the array
    			try {
    				CurrentObject[counter].setBounds(XPos, YPos, 50, 50);
    			}catch (ArrayIndexOutOfBoundsException exception){
    
    			}
    
    
    
    	}
    	public void AddScore(){
    		//This method is used to add the users score each time an object goes off the screen.
    		//Removes the previous score label to be replaced with the new updated one.
    		pane.remove(Score);
    		//The score counter is incremented.
    		ScoreCounter ++;
    		//tempScore takes the string value of the scoreCOunter to be used in a JLabel.
    		String tempScore = String.valueOf(ScoreCounter);
    		//Makes the JLAbel that will show the user their score.
    		Score = new JLabel ("SCORE : " + ScoreCounter );
    		//Sets the font of the score label.
    		Score.setFont(new Font("Comic Sans MS", Font.BOLD,20));
    		//Sets teh colore of teh score label.
    		Score.setForeground(Color.blue);
    		//Sets the bounds of the label to be in the upper right corner.
    		Score.setBounds(600, 10, 200, 100);
    		//Adds the score the the panel.
    		pane.add(Score);
    		//calls repaint method for the score.
    		Score.repaint();
    	}
    
    }
    The following is the class where I draw the charachter

    Java Code:
    // Data : January, 2011
    
    // imports java package
    	import java.awt.*;
    
    // public clas PlayDodgeEmDraw
    public class PlayDodgeEmDraw
    {
    	// declares variables
       	public int x, y, PicX, PicY;
    	Rectangle ObjRect;
    	Rectangle Head;
    	boolean collide = false;
       	public final int WIDTH = 40, HEIGHT = 20;
    // open constructor
    	public PlayDodgeEmDraw(){
    
    	}
    	// constructor that takes in paramaters
    	public PlayDodgeEmDraw(int PicXRec,int PicYRec){
    	// variable "PicX" = parameter
    		PicX = PicXRec;
          // variable "PicY" = parameter
          	PicY = PicYRec;
    		// creates new rectangle with the x and y parameters
    		ObjRect = new Rectangle(PicX, PicY, 50,50);
    
    	}
    
    
       public void move(int xPos, int yPos)
       {
        // finds x position of mouse
          x = xPos;
      // finds y position of mouse
          y = yPos;
    
    
       }
    
    
    
    	// draw method for the avatar ( stick man)
       public void draw(Graphics OBJ, int screenWidth)
       {
    		// creates new variable named "baseX" which will equal the x coordinate from another method - variable "WIDTH"
          int baseX = x - WIDTH;
    	// creates new variable named "baseY" which will equal the y coordinate from another method - variable "HEIGHT" / 2
          int baseY = y - HEIGHT/2;
    
    		// creates a new rectangle with the head coordinates
    		Head = new Rectangle(baseX - 10, baseY, 75,50);
    
    		//sends head (rectangle) to collision method
        	Collision(Head);
    
        	OBJ.setColor(Color.black);
    		// draws head
    		OBJ.fillRect(baseX - 10, baseY, 75,50);
    		// color set to yellow
    		OBJ.setColor(Color.yellow);
    		// draws left eye
    		OBJ.fillOval(baseX + 12, baseY + 10, 10 ,10);
    		// draws right eye
    		OBJ.fillOval(baseX + 32, baseY + 10, 10 ,10);
    		// draws smile
    		OBJ.fillArc(baseX + 13, baseY + 30,  25,  8,  170, 190);
    		// color set to black
    		OBJ.setColor(Color.black);
    		// draws stick body
    		OBJ.drawLine(baseX + 25, baseY + 50, baseX + 25, baseY + 70);
    		// draws left leg
    		OBJ.drawLine(baseX +24, baseY + 70, baseX + 10, baseY + 90);
    		// draws right leg
    		OBJ.drawLine(baseX +38, baseY + 90, baseX + 24, baseY + 70);
    		// draws arms (with one line)
    		OBJ.drawLine(baseX +10, baseY + 60, baseX + 40, baseY + 60);
    
    
    
    
       }
    
    	// our collision  method (which doesn't work properly)
       public void Collision(Rectangle Head) {
    
    
    	collide = Head.intersects(ObjRect);
    
    	if (Head.intersects(ObjRect)) {
    
    	System.out.println("Collision : true");
    
    	}
    
    
    
    
    
    	}
    
    
    
       }
    And finally the panel for the game and also the MouseListeners to move the charachter

    Java Code:
    // Data : January, 2011
    
    // imports java packages
    import java.awt.*;
    
    import javax.swing.*;
    
    import java.awt.event.*;
    	// public class "PlayDodgeEmPanel" extends the JPanel
    	public class PlayDodgeEmPanel extends JPanel
    {
    		// calls public PlayDodgeemDraw
    		public PlayDodgeEmDraw PlayDodgeEmDraw;
    	// private Image variables are declared.
    	    private Image image1;
    	 	private Image currentImage;
    
    	   public PlayDodgeEmPanel()
       {
        // variable "Image1" will equal background picture
         	image1 = (new ImageIcon("GameBackground1.png")).getImage();
        // variable "currentimage" will equal "Image1"
        	currentImage = image1;
         PlayDodgeEmDraw = new PlayDodgeEmDraw();
    	// declares new listener called "monitor"
          AvatarListener monitor = new AvatarListener();
          // Mouse motion listner is added to our listener named "monitor"
          addMouseMotionListener(monitor);
          // Mouse listner is added to our listener named "monitor"
          addMouseListener(monitor);
    
    		//Background color will be black if no picture is displayed
          setBackground (Color.black);
         // Preferred size of panel is 800 x 600
          setPreferredSize(new Dimension(800, 600));
    
    
       }
    	// calls graphical paint component method
       public void paintComponent(Graphics page)
       {
        // uses super class
          super.paintComponent(page);
         // panel will draw the background image
          page.drawImage(currentImage, 0, 0, null);
         // sends information to the draw method of "PlayDodgeEmDraw"
          PlayDodgeEmDraw.draw(page, getWidth());
    
    
       }
    
    	// public class avatar listner will implement bouth the mouse motion and mouse listneners (monitor)
       public class AvatarListener implements MouseMotionListener, MouseListener
       {
    	// public method for when the mouse is moved declared
          public void mouseMoved(MouseEvent event)
          {
           // calls and sends info to PlayDodgeEmDraw (x and y coords)
             PlayDodgeEmDraw.move(event.getX(), event.getY());
           // repaints
            repaint();
          }
    
    	// public method for when the mouse is dragged
          public void mouseDragged(MouseEvent event)
          {
            // calls and sends info to PlayDodgeEmDraw (x and y coords)
            PlayDodgeEmDraw.move(event.getX(), event.getY());
           // repaints
            repaint();
          }
    	// unused mouse method
    public void mousePressed(MouseEvent event)
    	{
    
    	}
    	// unused mouse method
    	public void mouseReleased(MouseEvent event)
    	{
    
    	}
    	// unused mouse method
    	public void mouseClicked(MouseEvent event)
          {
    
          }
    
    
    
    
    	// unused mouse method
          public void mouseEntered(MouseEvent event) {}
    		// unused mouse method
    	  	public void mouseExited(MouseEvent event) {}
      	}
    
    
    
    
       }
    Last edited by Harwad; 01-22-2011 at 09:24 PM.

  2. #2
    Harwad is offline Member
    Join Date
    Jan 2011
    Posts
    2
    Rep Power
    0

Similar Threads

  1. Three errors in collision detection methods
    By Fortu in forum New To Java
    Replies: 6
    Last Post: 12-19-2010, 11:32 PM
  2. Collision
    By shadycharacter in forum New To Java
    Replies: 0
    Last Post: 04-13-2010, 09:58 PM
  3. Collision Detection
    By dotabyss in forum Java Gaming
    Replies: 0
    Last Post: 03-14-2010, 06:13 PM
  4. Collision Detection (Game)
    By mscwd in forum Sun Java Wireless Toolkit
    Replies: 0
    Last Post: 01-28-2008, 08:34 PM
  5. Two Problems Rotating and collision detection help
    By jaferris in forum Java Applets
    Replies: 2
    Last Post: 01-07-2008, 11:19 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •