繁体   English   中英

我正在创建一个2D游戏,我正在尝试导入一些字体,但我不断收到错误消息

[英]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(); 
}

}

^这是我的主要课程[// Font.render(“ Hello Wolrd!0157”,screen,0,0,Colours.get(000,-1,-1,555));] <这是我要去的地方错误...

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

这是阅读字体的课程

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

这是我的显示课程,无论如何该错误使我丧命,而且我也不知道如何修复它,我在整个地方把机器人看了一个地方,我得到的错误是

字体类型中的方法render(String,Screen,int,int,int,int,int)不适用于参数(String,Screen,int,int,int)

尝试清理并重建项目。 似乎该程序的旧版本正在运行...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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