gpt4 book ai didi

java - 图形不会覆盖整个 Canvas

转载 作者:行者123 更新时间:2023-12-01 14:33:43 25 4
gpt4 key购买 nike

Where is this happening?据我所知:由于黄色, Canvas 显示正确。然而,图形不会完全覆盖 Canvas ,我的法律课也不会识别出黑色区域末端的它......

那么是什么原因导致这种情况发生呢?我如何在 Canvas 当前不可绘制的部分(黄色部分)上进行绘制,或者我应该以另一种方式实现我的图形?

编辑:UI类创建一个 Canvas 和一个缓冲区,然后图形类接管并开始在它们上绘图,但是由于某种原因它不能在黄色部分中,处理与红色立方体碰撞的法律类也不能和应用程序的墙壁,将黄色区域重新定义为有效的去处。即使通过相同的尺寸变量,到处都使用。

主类

package app;

public class Main {

static final int X = 1024;
static final int Y = 680;
static final int sanic = 10;
int fps = 0;
int frames = 0;
long totalTime = 0;
long curTime = System.currentTimeMillis();
long lastTime = curTime;
static int[] pos;
Graphics graphics;
Law physics;
static int status;
boolean holdState;

public Main() {
pos = new int[5];
pos[1] = X;
pos[2] = Y;
}

public void launch() {
// Audio sound = new Audio();
graphics = new Graphics();
physics = new Law();
graphics.draw();
// sound.play();
handle();
}

public void update() {
graphics.cache();
physics.check();
graphics.render();
try {
Thread.sleep(10);
} catch (Exception e) {
} finally {
graphics.dump();
}
}

public void handle() {
while (!isOver()) {
if (!isPaused()) {
update();
}
}
}

boolean isOver() {
if (status == 1) {
status = 0;
return true;
}
return false;
}

boolean isPaused() {
if (status == 2) {
status = 0;
if (!holdState) {
holdState = true;
pos[3] = pos[1];
pos[4] = pos[2];
} else if (holdState) {
holdState = false;
pos[1] = pos[3];
pos[2] = pos[4];
}
}
return holdState;
}

public static void main(String[] args) {
Main game = new Main();
game.launch();

}
}

用户界面类

package app;

import java.awt.*;
import java.awt.image.*;
import java.net.URL;
import javax.swing.*;

public class UI extends Main {

JFrame mainWin;
Canvas wall;
URL pic;
Toolkit kit;
Image img;
BufferStrategy Buffer;
Graphics2D shell;
Graphics2D ball;

public UI() {
mainWin = new JFrame("Game");
wall = new Canvas();
wall.addKeyListener(new Input());
}

void draw() {
frame();
icon();
canvas();
show();
prep();
}

void frame() {
mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWin.setBackground(Color.BLUE);
mainWin.setIgnoreRepaint(true);
}

void icon() {
pic = ClassLoader.getSystemResource("res/app.png");
kit = Toolkit.getDefaultToolkit();
img = kit.createImage(pic);
mainWin.setIconImage(img);

}

void canvas() {
wall.setBackground(Color.YELLOW);
wall.setIgnoreRepaint(true);
wall.setBounds(0, 0, X, Y);
}

void show() {
mainWin.add(wall);
mainWin.pack();
mainWin.setResizable(false);
mainWin.setLocationRelativeTo(null);
mainWin.setVisible(true);
}

void prep() {
wall.createBufferStrategy(2);
Buffer = wall.getBufferStrategy();
}
}

图形类

    package app;

import java.awt.*;

public class Graphics extends UI {
public void render() {
mask();
player();
fps();
Buffer.show();
}

void cache() {
shell = (Graphics2D) Buffer.getDrawGraphics();
ball = (Graphics2D) Buffer.getDrawGraphics();
}

void dump() {
shell.dispose();
ball.dispose();
}

void mask() {
shell.setColor(Color.black);
shell.fillRect(0, 0, X, Y);
}

void fps() {
lastTime = curTime;
curTime = System.currentTimeMillis();
totalTime += curTime - lastTime;
if (totalTime > 1000) {
totalTime -= 1000;
fps = frames;
frames = 0;
}
frames++;
shell.setColor(Color.GREEN);
shell.setFont(new Font("Courier New", Font.PLAIN, 12));
shell.drawString(String.format("FPS: %s", fps), 20, 20);
}

void player() {
ball.setColor(Color.RED);
ball.fillRect(pos[1], pos[2], 32, 32);
}
}

法律课

package app;

public class Law extends Main {

public void check() {
out();
}

void out() {
if (pos[1] < 0) {
pos[1] = 0;
}
if (pos[2] < 0) {
pos[2] = 0;
}
if (pos[1] > X - 32) {
pos[1] = X - 32;
}
if (pos[2] > Y - 32) {
pos[2] = Y - 32;
}
}
}

最佳答案

这是 Frame#setResizing 的一个错误。不要问我为什么,但它想在框架的宽度和高度上添加大约 10 像素。

我知道的最好的解决方案是在pack之前调用setRessized

void show() {
mainWin.add(wall);
mainWin.setResizable(false); // Call me first
mainWin.pack();
mainWin.setLocationRelativeTo(null);
mainWin.setVisible(true);
}

关于java - 图形不会覆盖整个 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16661992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com