2015-05-27 1 views
-2

Я работаю над движком java, но мой рендер продолжает получать недостижимую ошибку кода. Ошибка появляется в методе setPixels.java недостижимый код ошибки (Render class game development)

public class Renderer { 

    private int width, height; 
    private byte[] pixels; 


    public Renderer(GameContainer gc){ 
     width = gc.getWidth(); 
     height = gc.getHeight(); 
     pixels = ((DataBufferByte)gc.getWindow().getImage().getRaster().getDataBuffer()).getData(); 
    } 

    public void setPixel(int x, int y, float a, float r, float g, float b){ 

     if((x < 0 || x>= width || y < 0 || y>= height) || a == 0){ 
      return; 

      int index = (x + y * width) * 4; 
      pixels[index] = (byte)((a * 255f) + 0.5f); 
      pixels[index + 1] = (byte)((b * 255f) + 0.5f); 
      pixels[index + 2] = (byte)((g * 255f) + 0.5f); 
      pixels[index + 3] = (byte)((r * 255f) + 0.5f); 

     } 
    } 

    public void clear(){ 
     for(int x = 0; x < width; x++){ 
      for(int y = 0; y < height; y++){ 
       setPixel(x,y,1,0,1,1); 
      } 
     } 
    } 

} 
+1

Что вы ожидаете после утверждения 'return;'? Когда все эти «пиксели [..]» присваиваются? –

+0

В вашем if-statement вы вернетесь, прежде чем будете писать элементы [index]. Вы никогда не достигнете этого. – CodyF

+0

kk благодарит за сообщение –

ответ

1

Я думаю, что это то, что вы пытаетесь сделать?
Ваш оператор if не должен содержать все утверждения в вашей функции.

public void setPixel(int x, int y, float a, float r, float g, float b){ 

    // Check for invalid values 
    if((x < 0 || x>= width || y < 0 || y>= height) || a == 0){ 
     // Break out of function if invalid values detected 
     return; 
    } 

    // Update pixel 
    int index = (x + y * width) * 4; 
    pixels[index] = (byte)((a * 255f) + 0.5f); 
    pixels[index + 1] = (byte)((b * 255f) + 0.5f); 
    pixels[index + 2] = (byte)((g * 255f) + 0.5f); 
    pixels[index + 3] = (byte)((r * 255f) + 0.5f); 
} 
0

Оператор return завершает выполнение метода. В случае, если инструкция if выполняется в приведенном ниже коде, метод попадет в return и закончит работу перед тем, как сделать все остальное. Кажется, вам не нужен оператор return в setPixel, так как нет необходимости досрочно заканчивать метод.

public void setPixel(int x, int y, float a, float r, float g, float b) { 
    if((x < 0 || x>= width || y < 0 || y>= height) || a == 0){ 
     //return; 

     int index = (x + y * width) * 4; 
     pixels[index] = (byte)((a * 255f) + 0.5f); 
     pixels[index + 1] = (byte)((b * 255f) + 0.5f); 
     pixels[index + 2] = (byte)((g * 255f) + 0.5f); 
     pixels[index + 3] = (byte)((r * 255f) + 0.5f); 

    } 
} 
+0

спасибо хотя бы я узнал что-то новое –