2012-05-07 15 views
2

基本的に私はゲームのプロトタイプの文字スプライトにchar配列を使用しようとしていますが、 (配列の行単位で塗りつぶし矩形を使用してスプライトを描画する方法を見つけようとする)文字を出力するための正しい '行'に挿入します。再び、新しい行のスプライトの矩形を塗りつぶすために「インデントする」ためにif (i % 5 == 0) y_temp += 5;などの多くの方法を試しましたが、どれも機能していません。
提案/助けてください。forループを使用してchar配列からスプライトを描画する方法

コード:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class test extends JFrame { 
    private int x_pos, y_pos; 
    private JFrame frame; 
    private draw dr; 
    private char[] WARRIOR; 
    private Container con; 
    public test() { 
     x_pos = y_pos = 200; 
     frame = new JFrame("StixRPG"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(1000, 500); 
     frame.setResizable(false); 
     frame.setVisible(true); 
     con = frame.getContentPane(); 
     con.setBackground(Color.black); 
     dr = new draw(); 
     dr.setBackground(Color.black); 
     con.add(dr); 
     WARRIOR = (
     " " + 
     "!!!!!" + 
     "!!ooo" + 
     "!!!!!" + 
     "#####" + 
     "#####" + 
     "#####" + 
     "** **").toCharArray(); 
    } 
    public static void main(String[] args) { 
     test tst = new test(); 
    } 
    class draw extends JPanel { 
     public draw() { 
     } 
     public void paintComponent(Graphics g) { 
      super.paintComponents(g); 
      int y_temp = y_pos; 
      for (int i = 0; i < WARRIOR.length; i++) { 
       if (WARRIOR[i] == '!') { 
        g.setColor(new Color(0, 0, 204)); 
        g.fillRect(x_pos+i*5, y_temp, 5, 5); 
       } 
       else if (WARRIOR[i] == 'o') { 
        g.setColor(new Color(204, 0, 0)); 
        g.fillRect(x_pos+i*5, y_temp, 5, 5); 
       } 
       else if (WARRIOR[i] == '#') { 
        g.setColor(new Color(0, 0, 102)); 
        g.fillRect(x_pos+i*5, y_temp, 5, 5); 
       } 
       else if (WARRIOR[i] == '*') { 
        g.setColor(Color.black); 
        g.fillRect(x_pos+i*5, y_temp, 5, 5); 
       } 
      } 
     } 
    } 
} 
+0

いくつかのベストプラクティスの提案:クラス名は大文字で始まり、大文字は定数用に予約する必要があります(static final)。 –

答えて

1

私が正しくあなたを理解していれば、あなたはこのような権利の座標を取得する必要がありますx = i % 5; y = i/5;を。それで、あなたはfillRect(x*5, y*5, 5, 5);です。

編集:私はちょうどその余分なスペースを見ました。これは、あなたが最初に1減算する必要がありますを意味します
x = (i-1) % 5; y = (i-1)/5;

EDITを2:うん、そしてもちろん、あなたはy_posx_posを追加する必要があります:fillRect(x_pos + x*5, y_pos + y*5, 5, 5);

+0

それはとても役に立ちました!ありがとう、私は実際にif(i%5 == 0)を使って各行の最後の要素を除いて表示するスプライトの大部分を得ました{ \t \t \t \t \t \t y_temp + = 5; \t \t \t \t \t \t x_temp - = 25;他 \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t g.fillRect(x_temp + iは※5、y_temp、5、5)。これは、char if文の内部です。しかし、私はあなたの(素晴らしい/賢い)方法を試してみましょう! – Anwar

+0

また、xとyを毎回ゼロから計算すると、コードを読みやすく、エラーを起こしにくくなります。 – rolve

+0

Btw、あなたがあなたの問題を解決したら、答えを受け入れることを忘れないでください。 – rolve

0
int x = (i-1)%5; 
int y = (i-1)/5; 

fillRect(x_pos + x*5, y_pos + y*5, 5, 5); 

*それがあることに注意してください除算して乗算することが重要なのは、

整数演算です。

関連する問題