2

したがって、基本的には、現在、ゲームプロトタイプの文字スプライトにchar配列を使用しようとしていますが、正しい「行」の各要素を読み取って文字を印刷するための実用的な方法を見つけることができません(配列の行ごとに塗りつぶしを使用してスプライトを描画する方法)。if (i % 5 == 0) y_temp += 5;繰り返しになりますが、新しい行のスプライトの長方形を「インデント」して塗りつぶすなど、さまざまな方法を試しましたが、どれも機能していません。
提案/誰かを助けますか?

コード:

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);
                }
            }
        }   
    }   
}
4

2 に答える 2

1

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

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

編集2:ええ、そしてもちろんあなたは追加する必要がありy_posますx_posfillRect(x_pos + x*5, y_pos + y*5, 5, 5);

于 2012-05-07T19:46:46.437 に答える
0
int x = (i-1)%5;
int y = (i-1)/5;

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

*除算してから乗算することが重要であることに注意してください。

n (not always)== (n/5)*5

整数演算で。

于 2012-05-07T19:48:07.990 に答える