简体   繁体   中英

I am creating a 2d game, i am trying to import some fonts but i keep getting the error

package aaron.game;

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

import javax.swing.JFrame;

import aaron.game.gfx.Colours;
import aaron.game.gfx.Font;
import aaron.game.gfx.Screen;
import aaron.game.gfx.SpriteSheet;

public class Game extends Canvas implements Runnable{


private 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 = "Game";

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();
private int[] colours = new int[6*6*6];

private Screen screen;
public InputHandler input;

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 void init(){

    int index = 0;
    for(int r = 0;r<6;r++){
        for(int g = 0;g<6;g++){
            for(int b = 0;b<6;b++){
                int rr= (r*255/5);
                int gg= (g*255/5);
                int bb= (b*255/5);

                colours[index++] = rr<<16| gg<<8 | bb;
            }
        }
    }
    screen = new Screen(WIDTH, HEIGHT, new SpriteSheet("/sprite_sheet.png"));
    input = new InputHandler(this);
}

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 frames = 0;
    int ticks = 0;

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

    init();
    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(ticks + " ticks, " + frames + " frames");
            frames = 0;
            ticks = 0;
}
}
}



public void tick(){
    tickCount++;

    if(input.up.isPressed()){screen.yOffset--;}
    if(input.down.isPressed()){screen.yOffset++;}
    if(input.left.isPressed()){screen.xOffset--;}
    if(input.right.isPressed()){screen.xOffset++;}

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

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


    for(int y=0;y<32;y++){
        for(int x=0;x<32;x++){
            boolean flipX = x%2==1;
            boolean flipY = y%2==1;
            screen.render(x<<3, y<<3, 0, Colours.get(555,505,055,550), flipX, flipY);
    }
}

//  Font.render("Hello Wolrd! 0157", screen, 0, 0, Colours.get(000, -1, -1, 555));


    for(int y=0;y<screen.height;y++){
        for(int x=0;x<screen.width;x++){
            int colourCode=screen.pixels[x+y*screen.width];
            if(colourCode<255)pixels[x+y*WIDTH]=colours[colourCode];
    }
}
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){ 
new Game().start(); 
}

}

^This is my main class [ // Font.render("Hello Wolrd! 0157", screen, 0, 0, Colours.get(000, -1, -1, 555));] < this is where i am getting the error...

package aaron.game.gfx;


public class Font {

    private static String chars = "" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ      " + "0123456789.,:;'\"!?$%()-=+/      ";

    public static void render(String msg, Screen screen, int x, int y, int colour, int scale) {
        msg = msg.toUpperCase();

        for (int i = 0; i < msg.length(); i++) {
            int charIndex = chars.indexOf(msg.charAt(i));
            if (charIndex >= 0) screen.render(x + (i * 8), y, charIndex + 30 * 32, colour, false, false);
        }
    }
}

This is the class for reading my fonts

package aaron.game.gfx;

public class Screen {


    public static final int MAP_WIDTH = 64;
    public static final int MAP_WIDTH_MASK = MAP_WIDTH - 1;

    public int[]pixels;

    public int xOffset = 0;
    public int yOffset = 0;

    public int width;
    public int height;

    public SpriteSheet sheet;

    public Screen(int width, int height, SpriteSheet sheet){
        this.width = width;
        this.height = height;
        this.sheet = sheet;


        pixels=new int[width * height];

    }

    public void render(int xPos, int yPos, int tile, int colour){
        render(xPos, yPos, tile, colour, false, false);
    }


    public void render(int xPos, int yPos, int tile, int colour, boolean mirrorX, boolean mirrorY){
        xPos -= xOffset;
        yPos -= yOffset;

    int xTile = tile %32;
    int yTile = tile /32;
    int tileOffset=(xTile<<3)+(yTile<<3)*sheet.width;
    for(int y=0;y<8;y++){
        if(y+yPos<0 || y+yPos>=height)continue;
        int ySheet = y;
        if(mirrorY) ySheet = 7 - y;
        for(int x=0;x<8;x++){
            if(x+xPos<0 || x+xPos>=width)continue;
            int xSheet = x;
            if(mirrorX) xSheet = 7 - x;

            int col=(colour>>(sheet.pixels[xSheet+ySheet*sheet.width+tileOffset]*8))&255;
            if(col<255) pixels[(x+xPos)+(y+yPos)*width]=col;
    }
   }
  }
 }

This is my display class, anyway this error is killing me and i hae no idea how to fix it whatsoever, I have looked all over the place bot a single place, the error i am getting is

The method render(String, Screen, int, int, int, int) in the type Font is not applicable for the arguments (String, Screen, int, int, int)

Try cleaning and rebuilding the project. It seems like an older version of the program is being run...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM