2015-12-03 5 views
1

Итак, я создаю игру frogger, и у меня только что есть все, но я столкнулся с одной небольшой проблемой. Система столкновений у меня очень непоследовательная , Я пытался выяснить, что, но я не могу понять, что это такое. Я хочу, чтобы он остановился, когда он попал в прямоугольники. любая помощь будет рассмотрена.Завершил свою игру frogger, столкнувшись с проблемой моей системы столкновений

import java.awt.event.KeyEvent; 
import java.awt.geom.Rectangle2D; 
public class frogger 
{ 
    static double frogX = .5; 
    static double frogY = .02; 
    static double frogW = .02; 
    static double frogH = .02; 
    static double halfWidth = .05; 
    static double halfHeight = .02; 

    static double speeds[] = {.02, .03, .035 , .040, .043, .046, .060, .070}; 

    static Rectangle2D.Double[] rectangles = {new Rectangle2D.Double(.45 , .12 , .1 , .04), new Rectangle2D.Double(.45 , .27 , .1 , .04), new Rectangle2D.Double(.45 , .42 , .1 , .04), 
    new Rectangle2D.Double(.45 , .57 , .1 , .04), new Rectangle2D.Double(.45 , .72 , .1 , .04), new Rectangle2D.Double(.45 , .87 , .1 , .04), new Rectangle2D.Double(.45 , .92 , .1 , .04)}; 

    public static void drawscene() 
    { 
     StdDraw.clear(); 
     StdDraw.setPenColor(StdDraw.GREEN); 
     StdDraw.filledRectangle(frogX, frogY, frogW, frogH);  
     StdDraw.setPenColor(StdDraw.RED); 
     for(int i = 0; i < rectangles.length; i++) 
     { 
     StdDraw.filledRectangle(rectangles[i].x + halfWidth, rectangles[i].y - halfHeight, halfWidth, halfHeight); 
     } 
     StdDraw.show(1000/24); 
    } 



    public static void updateDirection() 
    { 

    for(int i = 0; i < rectangles.length; i++){ 
     rectangles[i].x += speeds[i]; 
    } 

    for(int i = 0; i < rectangles.length; i++){ 
     if(rectangles[i].x + halfWidth >= .98 || rectangles[i].x + halfWidth <= .02){ 
      speeds[i] *= -1; 
     } 
    } 



     if (StdDraw.isKeyPressed(KeyEvent.VK_UP)) 
     { 
      frogY += .01; 
     } 
     else if(StdDraw.isKeyPressed(KeyEvent.VK_DOWN)) 
     { 
     frogY -= .01; 
     } 
     else if(StdDraw.isKeyPressed(KeyEvent.VK_LEFT)) 
     { 
      frogX -= .01; 
     } 
     else if(StdDraw.isKeyPressed(KeyEvent.VK_RIGHT)) 
     { 
      frogX += .01; 
     } 

    } 

    public static void main(String[] args) 
    { 
     outerloop: 
     while(true) 
     { 
     frogger.drawscene(); 
     frogger.updateDirection(); 
     if (frogX >= 1) 
     { 
      break; 
     } 
     if (frogX <= 0) 
     { 

      break; 
     } 
     if(frogY >= 1) 
     { 
      break; 
     } 

     Rectangle2D.Double frog = new Rectangle2D.Double(frogX - frogW, frogY + frogH, frogW * 2, frogH * 2); 

     for(int i = 0; i < rectangles.length; i++){ 
      if(frog.intersects(rectangles[i])){ 
       break outerloop; 
      } 
     } 

     } 

     // put whatever you want to display at the end of the game here 


    } 
} 

ответ

1

Итак, я почти положительное это связано с неточностью двойников и поплавков в Java:

Why not use double or float to represent currency?

Я никогда не использовал библиотеку вы работаете с здесь. Рекомендуемое решение, когда требуется более точная точность, обычно работает с классом BigDecimal. Однако я не могу сказать, что я уверен, как вы это сделаете, используя эту библиотеку.

+0

Да, я использую StdDraw.java, но я загрузил std.lib и поместил его в свой jgrasp – kyle

+0

Просто любопытство, вы получили это, чтобы работать еще? Некоторое время я не делал такой игры. Я взял ваш код и преобразовал все ваши '' 'double''' в' '' BigDecimal''', выполнив все операции с использованием '' 'BigDecimal''', и это, казалось, разрешило неточность некоторых степень. Однако у меня не было времени обернуть голову вокруг логики столкновений, которую вы имели (т.е. логика столкновения не выполнялась, как я ожидал). – Mike

+0

Ну, идея у меня была там, где она рисует прямоугольники проверками, если лягушка столкнулась с прямоугольниками, что делает столкновение действительно состоящим, я пытаюсь понять большой десятичный класс, но мы никогда не узнавали об этом Я confuesd о том, как его реализовать – kyle

Смежные вопросы