- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定其他人是否也遇到过这个问题,但我正在做一些简单的动画工作。我试图有一个透明的背景,这很容易用以下代码制作:
jf.setBackground(new Color(0,0,0,0));
问题是,每当我试图移动的东西移动时(在我的例子中是史莱克图片),它会不断地绘制并且不会清除之前的史莱克。我将在下面发布我的所有代码。
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import java.io.*;
import java.util.logging.*;
import java.util.logging.*;
import javax.imageio.*;
public class MoveTest extends JPanel implements KeyListener {
double velX = 0;
double velY = 0;
double moveX = 0;
double moveY = 0;
double posX = 1;
double posY = 1;
double friction = 1.005;
BufferedImage image;
public void paintComponent(Graphics g) {
super.paintComponent(g);
try{
image = ImageIO.read(new File("shrek.png"));
}catch (IOException ex){
System.out.println("Image Does Not Exist");
}
g.setColor(Color.RED);
moveX += velX;
moveY += velY;
posX += moveX;
posY += moveY;
g.drawImage(image,(int)posX,(int)posY,null);
}
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
int up = KeyEvent.VK_UP, w = KeyEvent.VK_W;
int down = KeyEvent.VK_DOWN, s = KeyEvent.VK_S;
int left = KeyEvent.VK_LEFT, a = KeyEvent.VK_A;
int right = KeyEvent.VK_RIGHT, d = KeyEvent.VK_D;
if(key == w || key == up)
velY = -.2;
if(key == s || key == down)
velY = .2;
if(key == a || key == left)
velX = -.2;
if(key == d || key == right)
velX = .2;
}
public void keyReleased(KeyEvent e){
int key = e.getKeyCode();
int up = KeyEvent.VK_UP, w = KeyEvent.VK_W;
int down = KeyEvent.VK_DOWN, s = KeyEvent.VK_S;
int left = KeyEvent.VK_LEFT, a = KeyEvent.VK_A;
int right = KeyEvent.VK_RIGHT, d = KeyEvent.VK_D;
if(key == w || key == up)
velY = 0;
if(key == s || key == down)
velY = 0;
if(key == a || key == left)
velX = 0;
if(key == d || key == right)
velX = 0;
}
public void keyTyped(KeyEvent e){}
public static void main(String[] args) {
MoveTest mt = new MoveTest();
JFrame jf = new JFrame();
jf.setTitle("Test one cladss");
jf.setSize(1440,900);
jf.setBackground(new Color(0,0,0,0));
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(mt);
jf.setVisible(true);
mt.setOpaque(true);
mt.addKeyListener(mt);
mt.requestFocusInWindow();
while(true){
//jf.removeAll();
jf.repaint();
mt.collision();
mt.friction();
try {
Thread.sleep(16);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
public void collision(){
if(posX >= 1440-50|| posX <= 0){
velX -= (2*velX);
moveX -= (2*moveX);
}
if(posY >= 900-50 || posY <= 0){
velY -= (2*velY);
moveY -= (2*moveY);
}
}
public void friction(){
moveX /= friction;
moveY /= friction;
}
}
如果您有更多信息,请评论。如有任何帮助,我们将不胜感激!
最佳答案
我以前也遇到过这种情况。从 JFrame 重写的paintComponent 方法与从所有其他组件重写的方法不同。由于您已经覆盖了 JFrame 的绘制代码,因此它不再删除背景。解决办法有两种:
或
此外:
您不应该在每次绘画时都阅读您的图像。由于从任何线程调用重绘后不久就会进行绘制,因此图像可能会加载很多次。如果您需要加载一次,请在类中创建一个无名实例 block ,如下所示:
{
try{
image = ImageIO.read(new File("shrek.png"));
}catch (IOException ex){
System.out.println("Image Does Not Exist");
}
}
如果您只打算拥有一个副本,请将其设为静态 block :
static {
<load image here>
}
如果您想在每一帧中重新加载图像,因为它发生了变化,您需要找到一种方法来避免这样做。相反,任何图像动画都应该通过在 java 中编辑 BufferImage 对象或加载 sprite-map 来实现。
关于java - 透明背景清屏java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37709171/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How can I clear the terminal in Ruby? 如何在 ruby 中清除终端
对不起,我刚刚开始学习clojure。我在 REPL CLI 中运行了很多命令。但现在我无法清除 CLI 屏幕。 cls 命令在 REPL 中也不起作用。提前致谢! 最佳答案 尝试按 Control-
如何在delphi控制台应用程序(delphi xe6或更高版本)中清除控制台屏幕我已经搜索了互联网和帮助文件,但似乎找不到它? 最佳答案 I am trying to find out if the
对于 Java Applets,“清除屏幕”的最佳方法是什么?是否有特定的功能,或者您会创建并绘制一个屏幕大小的白色矩形? 清除整个小程序屏幕的最佳做法是什么? 最佳答案 通常清除小程序的最佳做法是绘
他们是一种在 mac 上用 c++ 清除屏幕而不使用 系统(“清除”);命令?如果不是,他们是替换角色的方法吗? 最佳答案 如果您绝对不关心可移植性,只需发出与 clear 相同的字符序列即可。 $
您好,我正在尝试使用此代码在 DOS 视频模式下清除屏幕。 但是当我运行它时,点仍然在那里! org 100h mov ah, 0 ; set display mo
我是一名优秀的程序员,十分优秀!