- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Java 游戏开发教程,虽然这似乎适用于 Windows,但 Java 在我的 Macbook Pro 上崩溃并出现以下错误:
C [libGL Image.dylib+0x24221] storeColor+0x5d1
目前项目设置在eclipse中,有以下类:
游戏:
package Main;
/**
* Created by beuden on 1/3/14.
*/
import javax.swing.JFrame;
public class Game {
public static void main(String[] args)
{
JFrame window = new JFrame("Dragon Tale");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setContentPane(new GamePanel());
window.setResizable(false);
window.pack();
window.setVisible(true);
}
}
游戏面板:
package Main;
import GameState.GameStateManager;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
/**
* Created by beuden on 1/3/14.
*/
public class GamePanel extends JPanel implements Runnable, KeyListener{
// Dimensions
public static final int WIDTH = 320;
public static final int HEIGHT = 240;
public static final int SCALE = 2;
Dimension d = new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
// game Thread
private Thread thread;
private boolean running;
private int FPS = 60;
private long targetTime = 1000 / FPS;
//image
private BufferedImage image;
private Graphics2D g;
// game state manager
private GameStateManager gsm;
public GamePanel()
{
super();
setPreferredSize(d);
setMaximumSize(d);
setMinimumSize(d);
setFocusable(true);
requestFocus();
}
public void addNotify()
{
super.addNotify();
if(thread == null)
{
thread = new Thread(this);
addKeyListener(this);
thread.start();
}
}
public void init()
{
image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
g = (Graphics2D) image.getGraphics();
running = true;
gsm = new GameStateManager();
}
public void run()
{
init();
long start,elapsed,wait;
long lastTime = System.nanoTime();
double nsPerTick = 1000000000/60D;
int frames = 0;
int ticks = 0;
long lastTimer = System.currentTimeMillis();
double delta = 0; // Now many unprocessed nanoseconds have gone by so far.
// Game Loop
while(running)
{
long now = System.nanoTime();
delta += (now - lastTime) / nsPerTick;
lastTime = now;
boolean shouldRender = false;
while(delta >=1)
{
ticks++;
update();
delta -=1;
shouldRender = true;
}
if(shouldRender)
{
frames++;
draw();
drawToScreen();
}
if(System.currentTimeMillis() - lastTimer > 1000)
{
lastTimer += 1000;
System.out.println("Frames: " + frames + "," + "Ticks: " + ticks);
frames = 0;
ticks = 0;
}
}
}
public void update()
{
gsm.update();
}
public void draw()
{
gsm.draw(g);
}
public void drawToScreen()
{
Graphics g2 = getGraphics();
g2.drawImage(image,0,0,(WIDTH * SCALE), (HEIGHT * SCALE), null);
g2.dispose();
}
public void keyTyped(KeyEvent key){}
public void keyPressed(KeyEvent key){
gsm.keyPressed(key.getKeyCode());
}
public void keyReleased(KeyEvent key){
gsm.keyReleased(key.getKeyCode());
}
}
游戏状态:
package GameState;
import java.awt.*;
/**
* Created by beuden on 1/3/14.
*/
public abstract class GameState {
protected GameStateManager gsm;
public abstract void init();
public abstract void update();
public abstract void draw(Graphics2D g);
public abstract void keyPressed(int k);
public abstract void keyReleased(int k);
}
package GameState;
import java.awt.*;
import java.util.ArrayList;
/**
* Created by beuden on 1/3/14.
*/
public class GameStateManager {
private ArrayList<GameState> gameStates;
private int currentState;
public static final int MENUSTATE = 0;
public static final int LEVEL1STATE = 1;
public GameStateManager()
{
gameStates = new ArrayList<GameState>();
currentState = MENUSTATE;
gameStates.add(new MenuState(this));
}
public void setState(int state)
{
currentState = state;
gameStates.get(currentState).init();
}
public void update()
{
gameStates.get(currentState).update();
}
public void draw(Graphics2D g)
{
gameStates.get(currentState).draw(g);
}
public void keyPressed(int k)
{
gameStates.get(currentState).keyPressed(k);
}
public void keyReleased(int k)
{
gameStates.get(currentState).keyReleased(k);
}
}
MenuState - 这是游戏可以处于的单一状态,还会有 1 级状态。
package GameState;
import java.awt.*;
import java.awt.event.KeyEvent;
import TileMap.Background;
/**
* Created by beuden on 1/4/14.
*/
public class MenuState extends GameState {
private Background bg;
private int currentChoice = 0;
private String[] options = {
"Start",
"Options",
"Quit"
};
private Color titleColor;
private Font titleFont;
private Font font;
public MenuState(GameStateManager gsm)
{
this.gsm = gsm;
try{
bg = new Background("/Backgrounds/menubg.gif", 1);
bg.setVector(-0.1, 0);
titleColor = new Color(128,0,0);
titleFont = new Font("Century Gothic", Font.PLAIN, 28);
font = new Font("Ariel", Font.PLAIN, 12);
}
catch(Exception e){
}
}
public void init(){}
public void update(){
bg.update();
}
public void draw(Graphics2D g){
//draw background
bg.draw(g);
//draw font
g.setColor(titleColor);
g.setFont(titleFont);
g.drawString("Dragon Tale", 80, 70);
//draw menu options
g.setFont(font);
for(int i = 0; i < options.length; i++)
{
if(i == currentChoice)
{
g.setColor(Color.BLACK);
}
else{
g.setColor(Color.red);
}
g.drawString(options[i], 145, 140 + i* 15);
}
}
public void select()
{
if(currentChoice == 0)
{
//Start
}
if(currentChoice == 1)
{
//Options
}
if(currentChoice == 2)
{
//Quit
System.exit(0);
}
}
public void keyPressed(int k){
if(k == KeyEvent.VK_ENTER)
{
select();
}
if(k == KeyEvent.VK_UP)
{
currentChoice--;
if(currentChoice < 0)
{
currentChoice = options.length - 1;
}
}
if(k == KeyEvent.VK_DOWN)
{
currentChoice++;
if(currentChoice == options.length)
{
currentChoice = 0;
}
}
}
public void keyReleased(int k){}
}
和背景:
package TileMap;
import Main.GamePanel;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
/**
* Created by beuden on 1/4/14.
*/
public class Background {
private BufferedImage image;
private double x, y,dx,dy;
private double moveScale;
public Background(String s, double ms)
{
try{
image = ImageIO.read(getClass().getResourceAsStream(s));
}
catch(Exception e)
{
System.out.println("Unable to read image!!!");
e.printStackTrace();
}
moveScale = ms;
}
public void setPosition(double x, double y)
{
this.x = (x * moveScale)%GamePanel.WIDTH;
this.y = (y * moveScale)%GamePanel.HEIGHT;
}
public void setVector(double dx, double dy)
{
this.dx = dx;
this.dy = dy;
}
public void update()
{
x += dx;
y += dy;
}
public void draw(Graphics2D g)
{
g.drawImage(image, (int)x, (int)y, null);
if(x < 0){
g.drawImage(image, (int)x + GamePanel.WIDTH, (int)y, null);
}
if(x > 0){
g.drawImage(image, (int)x - GamePanel.WIDTH, (int)y, null);
}
}
}
问题出现在 GamePanel 类中。
下一行:
g2.drawImage(image,0,0,(WIDTH * SCALE), (HEIGHT * SCALE), null);
导致崩溃。但将其更改为:
g2.drawImage(image, 0,0,WIDTH,HEIGHT,null);
并且游戏呈现完美,尽管上面的测量值 (320,240) 使其变小但它会绘制。
我不确定为什么缩放会突然导致崩溃。即使是对任何变量的简单 +1 也会导致它崩溃。
如有任何帮助,我们将不胜感激。
最佳答案
我在 OS/X Mavericks 上调用 Graphics.drawImage() 时也遇到了同样的问题,并设法通过手动安装 JDK 1.6 并使用它而不是 1.7 运行我的代码来解决这个问题。
参见 how-do-i-install-jdk-1-6-in-mavericks有关如何执行此操作的说明。
关于尝试在 OS X Mavericks 中绘制图形时 Java 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20916107/
在几个 SO 的问题中,有这些行可以访问代码的父目录,例如os.path.join(os.path.dirname(__file__)) returns nothing和 os.path.join(o
我想用 Python 更改文件模式。 os 模块具有三个功能上看似相同的功能: os.chmod os.fchmod os.lchmod 这三个版本有什么区别? 最佳答案 chmod 用于更改路径指定
考虑: pipe_read, pipe_write = os.pipe() 现在,我想知道两件事: (1) 我有两个线程。如果我保证只有一个正在读取 os.read(pipe_read,n) 而另一个
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
让我们以硬盘驱动器/网络接口(interface)为例。它由多个进程共享。现在多个进程可能会向硬盘驱动器发出并发命令来读取数据。当数据可用时,内核如何知道哪个进程的数据已准备好?操作系统和硬盘驱动器之
嗨,我正在尝试编写像这样的原子写入函数...... with tempfile.NamedTemporaryFile(mode= "w", dir= target_directory) as f:
net.Conn接口(interface)提供了 SetTimeout 方法,我应该用 os.Timeout 检查返回的错误.但是我看不到在返回的 os.Error 上调用 os.Timeout 的方
我正在使用 os 模块在我的 Django 项目 settings.py 文件中具有相对路径。变量 SITE_ROOT 设置为 settings.py 文件的当前工作目录,然后用于引用同样位于同一目录
正如我们所知,Windows 接受 "\" 和 "/" 作为分隔符。但是在python中,使用的是"\"。例如,调用 os.path.join("foo","bar"),将返回 'foo\\bar'。
我有以下工作目录:/Users/jordan/Coding/Employer/code_base ,我想要获取绝对路径的文件位于 /Users/jordan/Coding/Employer/code_
在 Python 中,如果路径中包含“~”,我能否确定扩展的用户调用将是绝对路径? 例如,这个表达式是否总是为真? path = '~/.my_app' os.path.expanduser(path
我是 Django 项目的初学者。Django 项目的 settings.py 文件包含这两行: BASE_DIR = os.path.dirname(os.path.dirname(os.path.
我有一个旧 MAC OS 文件存储中的文件集合。我知道集合存在文件名/路径名问题。问题源于我认为在原始操作系统中呈现为破折号的路径中包含一个代码点,但 Windows 与代码点斗争,并且其中一个包含
Ubuntu怎么安装mac os x主题呢?下文小编将为大家分享ubuntu14.04安装mac os x主题教程,安装MAC OS X&
我有一个 Firefox OS 应用程序,我希望在该应用程序之外打开一个链接(该链接指向不同的站点,在应用程序中打开它会使应用程序在没有强制的情况下无法使用)。我怎么做? Related bug re
我想为 Firefox OS 编写我的应用程序.使用什么样的语言(如 Android 的 Java 和 iOS 的 Objective C++)和工具(如 Eclipse、Xcode)? 最佳答案 适
我正在尝试创建一个 Palm OS 应用程序,以每 X 分钟或几小时检查一次网站,并在有数据可用时提供通知。我知道这种事情可以在新的 Palm 上完成——例如,当应用程序不在顶部时,我的 Centro
我需要在 Firefox OS 中显示全屏图像。我有一个具有 qHD 分辨率(960x540 像素)的“峰值”开发预览手机。 如何确保我的应用程序在其他具有不同屏幕分辨率的 firefox-os 设备
我正在尝试在 Firefox OS 中安装一个新的语言环境,但我不确定我是否正确地按照这些步骤操作。 首先,我尝试使用 Mercurial 下载所需的语言环境:它对我不起作用,Mercurial 说访
我有这个shell脚本Test.sh: #! /bin/bash FILE_TO_CHECK="/Users/test/start.txt" EXIT=0 while [ $EXIT -eq 0 ];
我是一名优秀的程序员,十分优秀!