日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java2d游戏代码_Java 2D游戏图形

發布時間:2025/3/21 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java2d游戏代码_Java 2D游戏图形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小編典典

您想要做的是創建一個帶有BufferStrategy的canvas組件并對其進行渲染,下面的代碼應該向您展示它的工作原理,我在這里從我自己編寫的Engine中提取了代碼。

性能完全取決于您要繪制的內容,我的游戲大多使用圖像。在大約1500個像素的情況下,我仍然在480x480分辨率下達到200

FPS以上。禁用幀限制時,只有100張圖像,而我達到了6k FPS。

我創建的一個小游戲(該游戲一次在屏幕上約有120張圖像)可以在此處找到(是的,下面的方法也可以作為applet正常工作。)

import java.awt.Canvas;

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.GraphicsConfiguration;

import java.awt.GraphicsEnvironment;

import java.awt.Toolkit;

import java.awt.Transparency;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.image.BufferStrategy;

import java.awt.image.BufferedImage;

import javax.swing.JFrame;

import javax.swing.WindowConstants;

public class Test extends Thread {

private boolean isRunning = true;

private Canvas canvas;

private BufferStrategy strategy;

private BufferedImage background;

private Graphics2D backgroundGraphics;

private Graphics2D graphics;

private JFrame frame;

private int width = 320;

private int height = 240;

private int scale = 1;

private GraphicsConfiguration config =

GraphicsEnvironment.getLocalGraphicsEnvironment()

.getDefaultScreenDevice()

.getDefaultConfiguration();

// create a hardware accelerated image

public final BufferedImage create(final int width, final int height,

final boolean alpha) {

return config.createCompatibleImage(width, height, alpha

? Transparency.TRANSLUCENT : Transparency.OPAQUE);

}

// Setup

public Test() {

// JFrame

frame = new JFrame();

frame.addWindowListener(new FrameClose());

frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

frame.setSize(width * scale, height * scale);

frame.setVisible(true);

// Canvas

canvas = new Canvas(config);

canvas.setSize(width * scale, height * scale);

frame.add(canvas, 0);

// Background & Buffer

background = create(width, height, false);

canvas.createBufferStrategy(2);

do {

strategy = canvas.getBufferStrategy();

} while (strategy == null);

start();

}

private class FrameClose extends WindowAdapter {

@Override

public void windowClosing(final WindowEvent e) {

isRunning = false;

}

}

// Screen and buffer stuff

private Graphics2D getBuffer() {

if (graphics == null) {

try {

graphics = (Graphics2D) strategy.getDrawGraphics();

} catch (IllegalStateException e) {

return null;

}

}

return graphics;

}

private boolean updateScreen() {

graphics.dispose();

graphics = null;

try {

strategy.show();

Toolkit.getDefaultToolkit().sync();

return (!strategy.contentsLost());

} catch (NullPointerException e) {

return true;

} catch (IllegalStateException e) {

return true;

}

}

public void run() {

backgroundGraphics = (Graphics2D) background.getGraphics();

long fpsWait = (long) (1.0 / 30 * 1000);

main: while (isRunning) {

long renderStart = System.nanoTime();

updateGame();

// Update Graphics

do {

Graphics2D bg = getBuffer();

if (!isRunning) {

break main;

}

renderGame(backgroundGraphics); // this calls your draw method

// thingy

if (scale != 1) {

bg.drawImage(background, 0, 0, width * scale, height

* scale, 0, 0, width, height, null);

} else {

bg.drawImage(background, 0, 0, null);

}

bg.dispose();

} while (!updateScreen());

// Better do some FPS limiting here

long renderTime = (System.nanoTime() - renderStart) / 1000000;

try {

Thread.sleep(Math.max(0, fpsWait - renderTime));

} catch (InterruptedException e) {

Thread.interrupted();

break;

}

renderTime = (System.nanoTime() - renderStart) / 1000000;

}

frame.dispose();

}

public void updateGame() {

// update game logic here

}

public void renderGame(Graphics2D g) {

g.setColor(Color.BLACK);

g.fillRect(0, 0, width, height);

}

public static void main(final String args[]) {

new Test();

}

}

2020-09-28

總結

以上是生活随笔為你收集整理的java2d游戏代码_Java 2D游戏图形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。