2013-12-14 3 views
-1

Надеюсь, вы можете мне помочь.Предполагается, что пиксель будет отображаться, но это не

Я участвую в Ludum Dare 28, и у меня возникла проблема, я отрисовываю пиксели на своем экране, и они должны появляться, но это не так?

Я новичок в этом, и я не понимаю, вставок кодирования, так что я надеюсь, что вы не возражаете, если я пошлю тебя к gyazo linkg (загрузчик снимка экрана)

Я получил свой код , Предполагается, что это будут пиксели рендеринга, как было сказано ранее. но это не так.

(надеюсь, у меня есть этот код вещь работает *) я никаких ошибок не появится в затмении

Screen.java

 package com.cmnatic.cmnatic.graphics; 

    public class Screen { 

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

     int xtime = 0, ytime = 50; 
     int counter = 0; 

     public Screen(int width, int height) { 
      this.width = width; 
      this.height = height; 
      pixels = new int[width * height]; // 0 - 50,399 = 50,400 
     } 

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

     public void render() { 
      counter++; 
      if (counter % 100 == 0) { 
       xtime++; 
      if (counter % 100 == 0) { 
       ytime++; 

      for (int y = 0; y < height; y++) { 
       if (ytime >= height) break; 
       for (int x = 0; x < width; x++) { 
        if (xtime >= width) break; 
        pixels[xtime + ytime * width] = 0xff00ff; 
       } 

      } 
     } 
    } 
    } 
    } 

          Game.java 



    package com.cmnatic.cmnatic; 

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; 

import com.cmnatic.cmnatic.graphics.Screen; 

public class Game extends Canvas implements Runnable { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private static final Screen Screen = null; 
    public static int width = 300; 
    public static int height = width/16 * 9; // 168 
    public static int scale = 3; 

    private Thread thread; 
    private JFrame frame; 
    private boolean running = false; 

    private Screen screen; 

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

    public Game() { 
     Dimension size = new Dimension(width * scale, height * scale); 
     setPreferredSize(size); 

     screen = new Screen(width, height); 

     frame = new JFrame(); 
    } 

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

    public synchronized void stop() { 
     running = false; 
     try { 
      thread.join(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void run() { 
     while (running == true) { 
      update(); 
      render(); 
     } 
    } 

    public void update() { 

    } 

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

     screen.clear(); 

     screen.render(); 

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

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

    public static void main(String[] args) { 
     Game game = new Game(); 
     game.frame.setResizable(false); 
     game.frame.setTitle("The Last Hit"); 
     game.frame.add(game); 
     game.frame.pack(); 
     game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     game.frame.setLocationRelativeTo(null); 
     game.frame.setVisible(true); 

     game.start(); 
    } 

    public static Screen getScreen() { 
     return Screen; 
    } 

} 
+0

Вы разместили два класса экрана. Сколько у тебя? –

+0

* «Я посылаю вас в gyazo linkg» * Я не знаю, что это чертову gyazo linkg, но это звучит болезненно. Можете ли вы перевести его на * Английский? * –

+0

Я решил не добавлять один: P Это загружаемый снимок экрана, поэтому вы выбираете регион на своем экране, и он загружает его, поэтому его можно быстро и легко разделить. Также @ElliottFrisch Я обновил код, извините за это. Извините, если это было непонятно. – user2908236

ответ

0

Read this javadoc. В частности, это предложение: Метод рисования должен быть переопределен для выполнения пользовательской графики на холсте.

Затем переопределите (например, реализуйте) краску в вашем классе игры (который имеет тип Canvas). И я думаю, что это должно начать что-то показывать.

// That is, something like this - 
public void paint(Graphics g) { 
    super.paint(g); 
    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
    g.drawImage(image, 0, 0, getWidth(), getHeight(), null); 
} 
+0

@ElliotFrisch Как бы я это сделал? Или я просто очень глупый теперь? – user2908236

+0

Добавьте метод с этой сигнатурой в Game 'public void paint (Graphics g) {super.paint (g); // DRAW HERE}' –

+0

«Конструкторский вызов должен быть первым оператором в конструкторе» – user2908236

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