2013-07-24 9 views
-5

Eh bien, je l'ai essayé de résoudre ce problème, mais je ne peux pas, si quelqu'un peut me aider ...Incompatibilité de type: ne peut pas convertir int en booléen

CODE:

package com.skybox.runordie; 

import java.awt.BorderLayout; 
import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.image.BufferStrategy; 
import java.awt.image.BufferedImage; 
import java.awt.image.DataBufferInt; 

import javax.swing.JFrame; 

public class Game extends Canvas implements Runnable { 

    public static final long serialVersionUID = 1L; 

    public static final int WIDTH = 160; 
    public static final int HEIGHT = WIDTH/12 * 9; 
    public static final int SCALE = 3; 
    public static final String NAME = "Run Or Die"; 

    private JFrame frame; 

    public boolean running = false; 
    public int tickCount = 0; 

    private BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); 
    private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData(); 


    public Game() { 
    setMinimumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE)); 
    setMaximumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE)); 
    setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE)); 

    frame = new JFrame(NAME); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(new BorderLayout()); 

    frame.add(this, BorderLayout.CENTER); 
    frame.pack(); 

    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
    } 


    public synchronized void start() { 
    running = true; 
    new Thread(this).start(); 
    } 

    public synchronized void stop() { 
    running = false; 
    } 

    public void run() { 
    long lastTime = System.nanoTime(); 
    double nsPerTick = 1000000000D/60D; 

    int ticks = 0; 
    int frames = 0; 

    long lastTimer = System.currentTimeMillis(); 
    double delta = 0; 

    while(running) { 
     long now = System.nanoTime(); 
     delta += (now - lastTime)/nsPerTick; 
     lastTime = now; 
     boolean shouldRender = true; 

     while (delta >= 1) { 
     ticks++; 
     tick(); 
     delta -= 1; 
     shouldRender = true; 
     } 
     try { 
     Thread.sleep(2); 
     } catch (InterruptedException e) { 
     e.printStackTrace(); 
     } 
     if (shouldRender) { 
     frames++; 
     render(); 
     } 
     if(System.currentTimeMillis() - lastTimer > 1000) { 
     lastTimer += 1000; 
     System.out.println(frames + " frames," + ticks + " ticks."); 
     frames = 0; 
     ticks = 0; 
     } 
    } 
    } 

    public void tick() { 
    tickCount++; 
    for(int i = 0; pixels.length; i++) { 
     pixels[i] = i + tickCount; 
    } 
} 

    public void render() { 
    BufferStrategy bs = getBufferStrategy(); 
    if(bs == null) { 
     createBufferStrategy(3); 
     return; 
    } 

    Graphics g = bs.getDrawGraphics(); 
    g.drawImage(image, 0, 0, getWidth(), getHeight(), null); 
    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, getWidth(), getHeight()); 

    g.dispose(); 
    bs.show(); 
    } 

    public static void main(String[] args) { 
    new Game().start(); 
    } 


    public int[] getPixels() { 
    return pixels; 
    } 


    public void setPixels(int[] pixels) { 
    this.pixels = pixels; 
    } 

} 
+2

votre code postal ici et ajouter la langue aux balises. Et dites-nous quelle ligne du code provoque le problème. –

+0

Veuillez poster * code * pertinent ici ... –

+0

Trop de code pour une question, en particulier sans aucun numéro de ligne ou d'autres informations. – jbabey

Répondre

5

Sur quoi ligne avez-vous l'erreur? Si je devais deviner, il est ici:

for(int i = 0; pixels.length; i++) { 
    pixels[i] = i + tickCount; 
} 

La deuxième clause dans une déclaration for devrait être une condition pour continuer la boucle, ce qui est un booléen. Cependant, pixels.length n'est pas un booléen, c'est un nombre entier. Je suppose que votre intention est de comparer cet entier avec un autre entier, entraînant un booléen:

for(int i = 0; i < pixels.length; i++) { 
    pixels[i] = i + tickCount; 
} 

Juste fournir un entier par lui-même ne dit pas quoi que ce soit en boucle sur la condition continue. Il a besoin de savoir à quelle condition pour continuer la boucle (sinon la boucle devrait se terminer). Cette condition, dans ce cas, est lorsque i est inférieure à pixels.length.

+0

Cela devrait apparaître directement sur l'IDE ... c'est-à-dire si l'OP en utilise un. Encore, Bonne prise. – Gamb

+0

@Gamb Toutes les erreurs de compilation "devraient" apparaître sur tout bon IDE ... – MathSquared

+0

@Gamb, et al: Même sans IDE, le compilateur lui-même va spécifier l'erreur et la ligne sur laquelle l'erreur est trouvée. – David

0

Le problème est dans la méthode suivante

public void tick() { 

      tickCount++; 

      for(int i = 0; pixels.length; i++) { // should compare pixels.length to some int to get boolean return 

        pixels[i] = i + tickCount; 

      } 
Questions connexes