- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个小游戏的小程序,我和一个 friend 正在为我们的计算机科学课开发一个小游戏。我们正在尝试制作一个在小程序启动时打开的菜单,然后 1 秒后显示类别选择屏幕。然而,一秒钟后,屏幕变成白色,但输出分配给信号类选择屏幕已加载的打印语句,我不确定为什么会发生这种情况,并想解决这个问题。
我尝试将显示类选择屏幕的代码放在另一个线程中,这样当它运行时就没有其他东西会阻碍它,但是,这没有改变任何东西。我还确保显示屏幕的条件正确,并且每 0.2 秒显示一次,但似乎没有任何效果。我试图让代码在角色的构造函数中运行,它应该运行一次,它运行一次,但运行一次的问题是它立即退出菜单并进入游戏的下一阶段没有理由。
import java.awt.*;
import java.applet.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.util.*;
public class FinalProjectTest extends Applet implements KeyListener, Runnable, MouseListener
{
int xCoord = 50;
int yCoord = 600;
int moveScale = 20;
int xSize = 20;
int ySize = 20;
int leftWall = 0;
int rightWall = 1000;
int topWall = 0;
int bottomWall = 650;
public volatile Graphics graphics;
boolean isInMenu = false;
boolean firstRun = true;
boolean drawMap = true;
int hostileAmount = 1000;
Character P1;
@Override
public void init()
{
addKeyListener(this);
addMouseListener( this );
}
public void Looper(Graphics g)
{
drawPlayer(g);
// Enemy 1
HostileObject enemy = new HostileObject(100, 250);
enemy.CreateHostile(g);
}
public void paint(Graphics g)
{
if (firstRun)
{
firstRun = false;
isInMenu = true;
System.out.println("Character Created");
P1 = new Character(g);
}
if (!isInMenu && !firstRun)
{
System.out.println("Game has begun!");
Map1 firstMap = new Map1(g);
Looper(g);
}
}
public void drawPlayer(Graphics g)
{
g.setColor(Util.black);
g.fillRect(xCoord - xSize, yCoord - ySize, xSize, ySize);
}
public void MovePlayer(int x, int y)
{
if (CheckPosition(xCoord + x, yCoord + y))
{
xCoord += x;
yCoord += y;
}
}
public boolean CheckPosition(int x, int y)
{
if (WallCheck1(x,y) && WallCheck2(x,y) && CheckBorders(x, y))
{
return true;
}
else
return false;
}
public boolean CheckBorders(int x, int y)
{
if (y + ySize <= bottomWall && y - ySize >= topWall && x - xSize >= leftWall && x + xSize <= rightWall)
{
return true;
}
else
return false;
}
public boolean WallCheck1(int x, int y)
{
if ((y - ySize >= Map1.wall1y1 || y + ySize <= Map1.wall1y2 + 20) || x - xSize >= Map1.wall1x2)
{
return true;
}
else
return false;
}
public boolean WallCheck2(int x, int y)
{
if ((y - ySize >= Map1.wall2y1 || y + ySize <= Map1.wall2y2 + 20) || x - xSize <= Map1.wall2x2)
{
return true;
}
else
return false;
}
boolean keyIsHeld;
char moveChar;
public void keyReleased( KeyEvent e )
{
keyIsHeld = false;
moveChar = ' ';
}
public void keyTyped( KeyEvent e ) { }
public void keyPressed( KeyEvent a )
{
char c = a.getKeyChar();
if ( c == 'w' )
{
moveChar = 'w';
keyIsHeld = true;
}
else if ( c == 'a')
{
moveChar = 'a';
keyIsHeld = true;
}
else if ( c == 's')
{
moveChar = 's';
keyIsHeld = true;
}
else if ( c == 'd')
{
moveChar = 'd';
keyIsHeld = true;
}
}
public void mouseClicked(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
if (isInMenu && P1.ClassID == 0)
{
if (x < 500 && y > 100 && y < 375)
{
P1.ClassID = 1;
isInMenu = false;
System.out.println(P1.Pseudo + " has chosen class: Warrior!");
}
if (x < 500 && y >= 375)
{
P1.ClassID = 3;
isInMenu = false;
System.out.println(P1.Pseudo + " has chosen class: UO3!");
}
if (x >= 500 && y > 100 && y < 375)
{
P1.ClassID = 2;
isInMenu = false;
System.out.println(P1.Pseudo + " has chosen class: Thief!");
}
if (x >= 500 && y >= 375)
{
P1.ClassID = 4;
isInMenu = false;
System.out.println(P1.Pseudo + " has chosen class: Mage!");
}
repaint();
}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public boolean mouseDown(Event e, int x, int y){return true;}
public void run()
{
while (!isInMenu || !firstRun)
{
if (moveChar == 'w')
{
MovePlayer(0, -moveScale);
}
else if (moveChar == 'a')
{
MovePlayer(-moveScale, 0);
}
else if (moveChar == 's')
{
MovePlayer(0, moveScale);
}
else if (moveChar == 'd')
{
MovePlayer(moveScale, 0);
}
Util.wait(200);
repaint();
}
}
Thread moveThread;
Graphics g;
boolean increaseDecrease = false;
public void SetUpGraphics(Graphics graphics)
{
g = graphics;
}
public void start ()
{
if (moveThread == null)
{
moveThread = new Thread(this);
moveThread.start();
}
}
}
class Map1 extends FinalProjectTest
{
protected static int wall1x1 = 0;
protected static int wall1y1 = 500;
protected static int wall1x2 = 810;
protected static int wall1y2 = 440;
protected static int wall2x1 = 1000;
protected static int wall2y1 = 200;
protected static int wall2x2 = 190;
protected static int wall2y2 = 140;
public Map1(Graphics g)
{
Walls wall1 = new Walls(g, wall1x1, wall1y1, wall1x2, wall1y2);
Walls wall2 = new Walls(g, wall2x1, wall2y1, wall2x2, wall2y2);
}
}
class HostileObject
{
private int startPosX, startPosY;
private int xSize = 35;
private int ySize = 35;
public int health = 100;
public HostileObject(int x, int y)
{
startPosX = x;
startPosY = y;
}
public void CreateHostile(Graphics g)
{
g.setColor(Util.black);
//Util.fillRect(g ,startPosX,startPosY,xSize,ySize);
}
}
class Walls
{
private static int wallCount = 2;
public Walls(Graphics g, int x1, int y1, int x2, int y2)
{
Util.fillRect(g, x1, y1, x2, y2);
}
}
class Character extends FinalProjectTest implements MouseListener, Runnable
{
protected int ClassID = 0;
protected int PlayerID = 0;
protected int GP = 100;
protected String Pseudo = "Muritor";
protected boolean DebuggingMode = false;
protected Graphics menuGraphics;
Thread startMenuThread;
public Character(Graphics g)
{
g.setColor(Util.black);
Util.fillRect(g, 1, 1, 1000, 650);
Util.drawButton(g, 1, 1, 1000, 100, "3 Floors", 2);
Util.wait(1000);
menuGraphics = g;
startMenuThread = new Thread(this);
startMenuThread.start();
}
public void run()
{
while (Thread.currentThread() == startMenuThread)
{
Util.fillRect(menuGraphics, 1, 1, 1000, 650);
Util.drawButton(menuGraphics, 1, 1, 1000, 100, "Choose a Class", 2);
Util.drawButton(menuGraphics, 1, 100, 500, 375, "Warrior", 1);
Util.drawButton(menuGraphics, 501, 100, 1000, 375, "Thief", 1);
Util.drawButton(menuGraphics, 1, 376, 500, 650, "UO3", 1);
Util.drawButton(menuGraphics, 501, 376, 1000, 650, "Mage", 1);
repaint();
System.out.println("Menu loaded");
Util.wait(200);
}
}
public static void ButtonSelection(Graphics g)
{
}
}
class Util
{
static final Color black = Color.black;
static final Color white = Color.white;
public static void wait(int mil)
{
try
{
Thread.sleep((mil));
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
public static void fillRect(Graphics g, int x1, int y1, int x2, int y2)
{
int widthPlaceholder = x2 - x1;
int heightPlaceholder = y2 - y1;
g.fillRect(x1,y1,widthPlaceholder,heightPlaceholder);
}
public static void drawButton(Graphics g, int x1, int y1, int x2, int y2, String title, int fontType)
{
g.setColor(Util.black);
int widthPlaceholder = x2 - x1;
int heightPlaceholder = y2 - y1;
g.fillRect(x1,y1,widthPlaceholder,heightPlaceholder);
g.setColor(Util.white);
widthPlaceholder = x2 - x1;
heightPlaceholder = y2 - y1;
for (int k = 0; k < 3; k++)
{
g.drawRect(x1+k,y1+k,widthPlaceholder-k,heightPlaceholder-k);
}
switch(fontType)
{
case 1:
Font characterCreateButton = new Font("SansSerif", Font.PLAIN, 75);
g.setFont(characterCreateButton);
g.drawString(title, x1+100, y1+100);
break;
case 2:
Font characterCreateTitle = new Font("SansSerif", Font.BOLD, 100);
g.setFont(characterCreateTitle);
g.drawString(title, x1+25, y1+80);
break;
case 3:
Font mainMenu = new Font("Arial", Font.ITALIC, 50);
g.setFont(mainMenu);
break;
}
}
}
我希望它每 0.2 秒显示一次“菜单已加载”,并以相同的速率刷新实际菜单屏幕,我收到消息,但小程序窗口只是白色。
最佳答案
public class FinalProjectTest extends Applet implements KeyListener, Runnable, MouseListener {
我不了解你,但是当我编译你的代码时,我明白了
Note: .../FinalProjectTest.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details.
所以,如果我启用编译器标志,我会得到...
Compiling 1 source file to .../build/classes
.../FinalProjectTest.java:18: warning: [deprecation] Applet in java.applet has been deprecated
public class FinalProjectTest extends Applet implements KeyListener, Runnable, MouseListener {
.../FinalProjectTest.java:179: warning: [deprecation] mouseDown(Event,int,int) in Component has been deprecated
public boolean mouseDown(Event e, int x, int y) {
^
.../FinalProjectTest.java:179: warning: [deprecation] Event in java.awt has been deprecated
public boolean mouseDown(Event e, int x, int y) {
^
3 warnings
这应该引起警钟。
小程序已被积极弃用,并且不再受支持,并且相信已在最新版本的 API 中删除,是时候继续前进了。
事实上,当我运行代码时,我得到:
Warning: Applet API and AppletViewer are deprecated.
public void paint(Graphics g) {
if (firstRun) {
firstRun = false;
isInMenu = true;
System.out.println("Character Created");
P1 = new Character(g);
}
if (!isInMenu && !firstRun) {
System.out.println("Game has begun!");
Map1 firstMap = new Map1(g);
Looper(g);
}
}
绘画应该描绘状态,而不是做出逻辑决定或改变状态,事实上,更令人担忧的是……
P1 = new Character(g);
您永远不应该维护对不是您自己创建的Graphics
上下文的引用。 AWT/Swing 中的绘制系统使用共享上下文,因此所有组件都将使用相同的 Graphics
上下文,也不能保证绘制周期之间的上下文相同。
这也表明您不了解 AWT/Swing 中的绘画系统是如何工作的。
以 Performing Custom Painting 开头和 Painting in AWT and Swing有关绘画实际工作原理以及应如何使用它的更多详细信息
好吧,所以从现在开始,其他一切都只是在上述基础上复合,让糟糕的情况变得无限糟糕,例如......
public void run() {
while (Thread.currentThread() == startMenuThread) {
Util.fillRect(menuGraphics, 1, 1, 1000, 650);
Util.drawButton(menuGraphics, 1, 1, 1000, 100, "Choose a Class", 2);
Util.drawButton(menuGraphics, 1, 100, 500, 375, "Warrior", 1);
Util.drawButton(menuGraphics, 501, 100, 1000, 375, "Thief", 1);
Util.drawButton(menuGraphics, 1, 376, 500, 650, "UO3", 1);
Util.drawButton(menuGraphics, 501, 376, 1000, 650, "Mage", 1);
repaint();
System.out.println("Menu loaded");
Util.wait(200);
}
}
这个“可能”看起来没问题,但如果您了解绘画的方式,您就会明白调用 repaint
将触发绘画传递并导致 paint
被调用再次...等待,坚持...
class Character extends FinalProjectTest implements MouseListener, Runnable {
为什么Character
从FinalProjectTest
扩展?它甚至没有添加到任何可以绘制它的容器中......哦天哪......
重新开始。
不,说真的,扔掉你所做的一切并重新开始。这次从阅读(和理解)开始......
KeyListener
在这里不是一个好的选择关于尽管运行代码来显示菜单,Java 小程序仍显示白屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769143/
我是OpenGL新手,我想用我的着色器在屏幕上绘制一个简单的三角形。我设置了缓冲区并编写了一个着色器,但是它似乎不起作用。它显示白色屏幕,我尝试使用glGenBuffer更改glCreateBuffe
我现在真的很沮丧,JS 从来不适合我。我不知道我这次犯了什么小错误,如果你指出的话,我将不胜感激。我不需要动画或任何东西,如果有人告诉我错误,我会很高兴。 window.onload = functi
我正在开发一个 phonegap 应用程序,我使用了一个多页面模板,如 page1.html、page2.html。每个页面都会访问服务器并呈现输出并将其显示在 ListView 中。所以问题是如果我
我有一台 iPad 2,我正在 viewDidLoad 中测试此代码,并调用此代码 -(void)stillCameraStart{ GPUImageStillCamera *stillCam=[[G
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
将 Android 模拟器更新到版本 27.0.1 后,出现白屏,模拟器甚至无法启动。 这是行为的截图: 屏幕上没有启动 Logo 或任何内容。 这是模拟器设置的屏幕截图: 所有模拟器都无法正常工作,
我想在我的游戏中实现网络功能,但是我有一个很大的问题。当我尝试创建 JFrame 组件时,执行网络代码后,它总是显示为白屏。虽然网络可以工作,但我无法以任何方式让用户界面工作。这是网络代码: pack
我收到有关此问题的错误报告:https://github.com/gatsbyjs/gatsby/issues/25920 但是 Gatsby 的人们似乎太忙了,无法回答,因此也许其他人也知道这个问题
我试图让 Magento 从我正在使用的主题的 adminHtml 而不是默认的核心位置加载核心文件,并将以下代码添加到我的扩展中: fort
当我在处理数据后尝试使用 Laravel Redirect 类重定向我的用户时,我目前遇到白屏死机。如果我使用 native php-function header("location ..."),应
我正在使用 react 路由器 dom 的仪表板工作。我有一个结构,即 Auth 页面和仪表板页面。当我从登录导航到 mainPages 并尝试在 DashboardContainer 中选择一个导航
我决定使用 3D WebGL 查看器来放置我的网站,但我有一个小问题。 一切正常,我可以移动我的对象并看到它,但是当我加载页面时,在单击时移动鼠标之前屏幕是黑色的。所以这对我来说不是问题,但对访问我网
我正在使用 CF 10,我试图找出为什么我无法得到一个错误来告诉我出了什么问题。 #session
Webkit 仍然有一些问题。在整理我昨天早上的错误后,我遇到了一个全新的线索,从 113 到直接崩溃(对于 iOS 开发人员来说真的很新,接受过 C++ 的正式培训,非常生疏哈哈)。 我终于得到了一
在我提出我的问题之前,我想提一下我尝试寻找解决方案 here和 here . 我正在创建一个使用 native UIWebView 的混合应用程序用于呈现响应式设计的 Web 应用程序。以下是问题描述
我在使用 libGDX 时遇到问题,当我在使用后退按钮退出后恢复应用程序时,我只看到一个白屏。 实际的应用程序运行,接受触摸输入并播放声音,但屏幕只是白色。 我读到过保持对纹理的静态引用可能会导致这个
我的页面中有很多链接,每个链接都有两个属性,格式和源。 它点击了什么我得到它的 2 attr 并像这样在 js 中制作 HTML。 $(".play").live('click',function(
我在 PHP 从数据库获取文本数据时遇到问题。有问题的数据是我从 share.mapbbcode.org 导出的 JSON 运行路线,因此我可以将它们绘制在 OSM map 上以进行个人跟踪。 我正在
当我点击应用程序的运行按钮时, the simulator just shows a white screen 但是应该有一个显示“Hello World”的按钮。另外,对于标签, an error
问题:启动时,GLWindow 仅显示白屏,光标显示加载圆圈,表示仍在加载某些内容。不久之后窗口显示“无响应”。 我已经尝试降级到 openGL 3.3,并且很乐意为此提供帮助,但问题仍然存在。 大家
我是一名优秀的程序员,十分优秀!