School Assignment? Project Due Tomorrow? Chat LIVE With A Programming Expert!

Welcome to Dream.In.Code
Become an Expert!

Join 307,035 Programmers for FREE! Get instant access to thousands of experts, tutorials, code snippets, and more! There are 2,281 people online right now. Registration is fast and FREE... Join Now!




Collison Detection

 

Collison Detection, Cant get collision detection to work

Riz 01

19 Oct, 2009 - 06:47 PM
Post #1

New D.I.C Head
*

Joined: 27 Aug, 2009
Posts: 24

Hi guys im currently making a puyo puyo game but i cant seem to get my collision detection working im using bounding rectangles in order to check for collision but i cant seem to get it to work. Id appreciate any help/advice you guys might have. Here is my code

CODE
//Draw Player 1(BOX)
    Rectangle box1 = new Rectangle(current[0].x,current[0].y, image_height, image_width);
        
        //Draw Player 2(BOX)
        
        Rectangle box2 = new Rectangle(current[1].x,current[1].y, image_height, image_width);

        public void checkCollisions(boolean box1, box2){
             for(int i=0; i<box1.length; i++)
             {
                  for(int j=0; j<box2.length; j++)
                  {
                      if(box1.intersects(box2));
                          return true;
                  }
             }
              return false;
        };


here is the complete code for my logic class

CODE
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;  
import javax.swing.event.*;
import java.util.Random;




public class PuyoLogic extends JPanel {

  final int board_height = 12;
  final int board_width = 6;
  final int image_height= 32;
  final int image_width = 32;
  final int MAX_X = board_width*image_width;
  final int MAX_Y = board_height*image_height;
  private static final int DELTA_Y = 2;
  private static final int TIMER_DELAY = 20;

  Image images[];
  Puyo puyolist[][];
  Puyo current[];
  Timer pptimer;
  Random myRand = new Random();
  boolean keyRight,keyLeft,keyUp;
  
     public PuyoLogic() {
     super();
       
        puyolist = new Puyo[board_width][board_height];
       
        current = new Puyo[2];
        current[0] = new Puyo(myRand.nextInt(4), (board_width * image_width /3), 0);
        current[1] = new Puyo(myRand.nextInt(4), (board_width * image_width /3)+image_width, 0);
       
     images = new Image[4];
     images[0] = Toolkit.getDefaultToolkit().getImage("puyo_yellow.png");
     images[1] = Toolkit.getDefaultToolkit().getImage("puyo_blue.png");
     images[2] = Toolkit.getDefaultToolkit().getImage("puyo_green.png");
     images[3] = Toolkit.getDefaultToolkit().getImage("puyo_red.png");
      
     setFocusable(true);
     PuyoMove puyo_move = new PuyoMove(); // Make a new video game KeyListener
     addKeyListener(puyo_move);
     setBackground(Color.BLACK);
    

      pptimer = new Timer(TIMER_DELAY, new TimerAction());
      pptimer.start();
     }  
         
       public void setAnimation(boolean OnandOff){
        if (OnandOff) {
            pptimer.start();  
        } else {
            pptimer.stop();
        }
      }
      
      //Draw Player 1(BOX)
    Rectangle box1 = new Rectangle(current[0].x,current[0].y, image_height, image_width);
        
        //Draw Player 2(BOX)
        
        Rectangle box2 = new Rectangle(current[1].x,current[1].y, image_height, image_width);

        public void checkCollisions(boolean box1, box2){
             for(int i=0; i<box1.length; i++)
             {
                  for(int j=0; j<box2.length; j++)
                  {
                      if(box1.intersects(box2));
                          return true;
                  }
             }
              return false;
        };
        

      
    
    

     public void NewPuyo(){
        current[0] = new Puyo(myRand.nextInt(4), (board_width * image_width /3), 0);
        current[1] = new Puyo(myRand.nextInt(4), (board_width * image_width /3)+image_width, 0);
  
  
    }
    public void puyoBoundsRight(Puyo[] current){
    if ((current[0].x + image_width <= MAX_X - image_width) && (current[1].x + image_width <= MAX_X - image_width)){
    current[0].x += image_width;
    current[1].x += image_width;
  }
}

    public void puyoBoundsLeft(Puyo[] current){
    if ((current[0].x - image_width >= 0) && (current[1].x - image_width >= 0)){
    current[0].x -= image_width;
    current[1].x -= image_width;
  }
}  

     private class PuyoMove implements KeyListener {
         
     public void keyTyped(KeyEvent k){}
     public void keyReleased(KeyEvent k){}
     public void keyPressed(KeyEvent k){
         
        switch (k.getKeyCode()){
         
         case KeyEvent.VK_LEFT:
             keyLeft = true;
             break;
             
         case KeyEvent.VK_RIGHT:
             keyRight = true;
             break;
       }
     }
   }
  
      

  
        public void paintComponent(Graphics g){
        super.paintComponent(g);  
        for(int i = 0; i < board_width; i++){
            for(int j = 0; j < board_height; j++){
            
                if(puyolist[i][j] != null)
                    g.drawImage(images[puyolist[i][j].color],puyolist[i][j].x,puyolist[i][j].y,this);
            }
        }
        
        
        

        g.drawImage(images[current[0].color],current[0].x,current[0].y,this);
        g.drawImage(images[current[1].color],current[1].x,current[1].y,this);
      }
        
      
        class TimerAction implements ActionListener {
      
        public void actionPerformed(ActionEvent e) {
    
          if (keyLeft){
          
            
            puyoBoundsLeft(current);
            keyLeft = false;
            
        }
          else if (keyRight) {  
              
            puyoBoundsRight(current);
            keyRight = false;
          
          }
          if (current[0].y + image_height <= MAX_Y && current[1].y + image_height  <= MAX_Y)
          {
             
             
             current[0].y += DELTA_Y;
             current[1].y += DELTA_Y;
         
        }
        else {
                  
                  
                  puyolist[current[0].x/image_width][current[0].y/image_height] = current[0];
                  puyolist[current[1].x/image_width][current[1].y/image_height] = current[1];
                  NewPuyo();
             }
             repaint();
          }
        }
      }





User is offlineProfile CardPM
+Quote Post


SixOfEleven

RE: Collison Detection

19 Oct, 2009 - 07:19 PM
Post #2

Code Guru
Group Icon

Joined: 18 Oct, 2008
Posts: 3,063



Thanked: 169 times
Dream Kudos: 775
Expert In: C, C#, XNA, Game Programming, Programming Concepts

My Contributions
Part of your problem may be where you create your Rectangles. It might not matter if your Rectangles are actually squares but your height and width parameters are reversed. Rectangles are constructed with (X, Y, Width, Height) from what I recall.

I believe that the intersects method alone will tell you if the Rectangles will intersect. Just doing:

CODE

if (box1.intersects(box2))
  // Collision detected


Should tell you if the two Rectangles intersect.
User is online!Profile CardPM
+Quote Post

Fast ReplyReply to this topicStart new topic

Time is now: 11/21/09 08:39AM

Live Help!

Be Social

Dream.In.Code RSS Feed Dream.In.Code LinkedIn Group Follow Us On Twitter Fan Us On Facebook

Tutorials

Programming

Web Development

Reference Sheets

Code Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month