java图像在背景图移动_java – 在Swing中移动背景图像
你好我是编程新手,我们有一个项目.我们创建了一个简单的赛车游戏,背景动人,但我坚持我的代码,我不知道该怎么做.游戏开始时我需要一个移动的背景请有人帮助我.我在求T_T
这是我的代码:
public class Game extends JFrame implements KeyListener, ActionListener {
Random s = new Random();
int x = 0, y = 50, a = 0, b = 250, f = 900, a1 = 0, b2 = 350, a2 = 0, b3 = 150;
int Move;
int value;
JLabel spriteLabel1 = new JLabel(new ImageIcon("ss.gif"));
JLabel spriteLabel2 = new JLabel(new ImageIcon("ss.gif"));
JLabel spriteLabel3 = new JLabel(new ImageIcon("ss.gif"));
JLabel spriteLabel4 = new JLabel(new ImageIcon("ss.gif"));
JLabel background = new JLabel(new ImageIcon("geren.png"));
Timer T1 = new Timer(5000, this);
Timer T = new Timer(5, this);
public static void main(String args[]) {
new Game();
}
public Game() {
Container c = getContentPane();
c.setLayout(null);
c.add(spriteLabel1);
c.add(spriteLabel2);
c.add(spriteLabel3);
c.add(spriteLabel4);
c.add(background);
background.setBounds(0, 0, 1024, 768);
addKeyListener(this);
setSize(1000, 750);
setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);
spriteLabel1.setBounds(x, y, 60, 1000);
spriteLabel2.setBounds(a, b, 60, 800);
spriteLabel3.setBounds(a1, b2, 60, 500);
spriteLabel4.setBounds(a2, b3, 60, 650);
}
public void keyPressed(KeyEvent e) {
String k = e.getKeyText(e.getKeyCode());
if (k.equals("D")) {
if (a != f) {
x = x + 15;
spriteLabel1.setIcon(new ImageIcon("ss.gif"));
repaint();
if (x > f) {
x = f;
spriteLabel1.setIcon(new ImageIcon("ss.gif"));
//JOptionPane.showMessageDialog(null,"Congratulations!!
//Sanji wins!","Result",JOptionPane.PLAIN_MESSAGE,
//new ImageIcon("evolve sanji.gif"));
//System.exit(0);
}
repaint();
}
}
T.stop();
}
if(k.equals (
"D"))
{
if (x != f) {
T.start();
Move = 3;
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void actionPerformed(ActionEvent e) {
if (Move == 3) {
a = a + (s.nextInt(3));
a = a + value;
if (a > f) {
a = f;
}
spriteLabel2.setIcon(new ImageIcon("ss.gif"));
spriteLabel2.setBounds(a, b, 100, 800);
}
if (a == f) {
if (Move == 3) {
a1 = a1 + (s.nextInt(3));
a1 = a1 + value;
if (a1 > f) {
a1 = f;
}
spriteLabel3.setIcon(new ImageIcon("ss.gif"));
spriteLabel3.setBounds(a1, b2, 100, 500);
}
if (Move == 3) {
a2 = a2 + (s.nextInt(5));
a2 = a2 + value;
if (a2 > f) {
a2 = f;
}
spriteLabel4.setIcon(new ImageIcon("ss.gif"));
spriteLabel4.setBounds(a2, b3, 100, 650);
}
}
}
}
解决方法:
这是扰流板
这是肉
我看到你做错了一些事情:
>不断创建新图像.只需使用相同的图像.
>我会,而不是使用标签,只是在绘画表面上绘制一个Image / BufferedImage.
>忘记两个计时器.你可以用一个到期.这就是你管理国家的方式.
>不要在paint方法中做任何逻辑.在你目前的情况下,因为甚至没有画任何东西,你甚至不需要它.在我的例子中,虽然我画了图像.
>不要在JFrame上绘制并覆盖绘制.改为在JPanel中覆盖paintComponent并将该面板添加到框架中.
>最后,关键成分,使用方法(从Graphics) –
public abstract boolean drawImage(Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
ImageObserver observer)
你可以得到一个更好的解释in this post.基本上,s点是源图像,所以你可以在动画期间移动sx1和sx2,它将移动图像的一部分绘制在d点绘画表面.
这是完整的例子
(注意我用于背景的图像是2000×350)
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class MovingBackgroundDemo {
public MovingBackgroundDemo() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new AnimatingPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private class AnimatingPanel extends JPanel {
private static final int DIM_W = 350;
private static final int DIM_H = 350;
private static final int INCREMENT = 10;
private BufferedImage backgroundImage;
private Image runnerImage;
private int dx1, dy1, dx2, dy2;
private int srcx1, srcy1, srcx2, srcy2;
private int IMAGE_WIDTH;
public AnimatingPanel() {
initImages();
initImagePoints();
Timer timer = new Timer(40, new ActionListener() {
public void actionPerformed(ActionEvent e) {
moveBackground();
repaint();
}
});
timer.start();
FlowLayout layout = (FlowLayout)getLayout();
layout.setHgap(0);
layout.setVgap(0);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(backgroundImage, dx1, dy1, dx2, dy2, srcx1, srcy1,
srcx2, srcy2, this);
g.drawImage(runnerImage, 0, 0, getWidth(), getHeight(), this);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(350, 350);
}
private void initImagePoints() {
dx1 = 0;
dy1 = 0;
dx2 = DIM_W;
dy2 = DIM_H;
srcx1 = 0;
srcy1 = 0;
srcx2 = DIM_W;
srcy2 = DIM_H;
}
private void initImages() {
try {
runnerImage = new ImageIcon(getClass().getResource("runner.gif")).getImage();
backgroundImage = ImageIO.read(getClass().getResource(
"background.png"));
IMAGE_WIDTH = backgroundImage.getWidth();
System.out.println(IMAGE_WIDTH);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void moveBackground() {
if (srcx1 > IMAGE_WIDTH) {
srcx1 = 0 - DIM_W;
srcx2 = 0;
} else {
srcx1 += INCREMENT;
srcx2 += INCREMENT;
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MovingBackgroundDemo();
}
});
}
}
标签:imageicon,keylistener,java,swing,paint
来源: https://codeday.me/bug/20190728/1561951.html
java图像在背景图移动_java – 在Swing中移动背景图像相关推荐
- python设置画布背景图_如何使画布中的背景图像随窗口展开?
我正在尝试设置天气应用程序的背景图像,我尝试使用画布,但图像并没有随着窗口展开,只有当我单击"搜索"以查看结果时,它才会展开,标签会显得凌乱,就像我使用网格一样 有人能帮我修好这个 ...
- 前端背景图放置_前端开发关于网页背景图片的缩放自适应及组合形成背景图的问题...
前端游戏开发贴吧 游戏前端开发 游戏开发流程 策划美术前端后端 昨天在切图时遇到如下两个问题: 1.需要背景图片无论浏览器大小如何缩放,背景图片始终宽度百分百显示. 2.需要将给出的一张背景图片和一张 ...
- java swing背景_java Swing中添加背景图片(总结)
在java GUI图形化设计中,Swing组件添加背景图片主要有两中情况:1,在Jpanl面板中添加背景图片,2,在jLable中添加背景图片 首先介绍一种最巧妙的背景图片添加方法, 1.利用JLab ...
- div中插入图片_Web前端开发基础知识,设置网页背景图,如何在网页中插入图片...
图片 一.图片的表现形式 当我们在制作页面的时候,通常会遇到图片的三种表现形式,如下: 1.内容图片 内容图片是页面中真正的内容,没有内容图片,就无法完整的理解页面内容.如淘宝网上的商品展示图片,这些 ...
- css 鼠标滑过li变背景图,CSS定义鼠标滑过变换背景的导航菜单
我们经常看到的网站基本上都有导航菜单,有的网站看上去非常酷,鼠标一移动到上面自动改变颜色,这样的导航有两种方法可以实现:一种是鼠标经过图像,一种是CSS定义. 鼠标经过图像是把菜单做成两张文字相同但颜 ...
- android 背景图遮罩,通过css使用background-color为背景图添加遮罩效果
一个div同时设置background-color和background-image的话,color是处于img层下方的,无法实现遮罩效果,所以需要再创建一个div作为其子div,然后设置子div的背 ...
- 背景图页面缩小会变形_CSS 实现背景图尺寸不随浏览器缩放而变化
一些网站的首页背景图尺寸不随浏览器缩放而变化,例如百度个人版的首页,缩放后背景图的尺寸并不改变: 这样做的好处是,比如当你在1024*768px分辨率的屏幕上看到完整的背景,再换至1280*800px ...
- element ui背景图_vue+element-ui如何为元素设置背景图片
在元素标签里,直接: style="background-image:url('1.jpg')"//图片路径 是不能显示图片的. 也不能直接background...,就是说不通过 ...
- gif背景图html,教你更换样式GIF背景图~文末超美!
先来欣赏一波GIF背景图样式: GIF背景样式 || 样式ID:87514 || 我对生命无所期待.我没有预先想过要什么.生活本身就够激动人心的了. by 萨冈 || 样式ID:40508 | ...
最新文章
- 苹果出了新手机,我却盯上了他的手机壳
- Centos添加其他yum源
- Eclipse和IDEA 简单对比说明
- 牛客网——奥运排序问题
- java 进程 cpu占用_JAVA进程CPU占用高的故障排查 – 运维那些事
- return error怎么定义_这一次搞懂Spring自定义标签以及注解解析原理
- python发微信工资条_帮公司财务妹子写了个“群发工资条”的Python脚本!
- 阿里腾讯华为在行动!程序员远程办公究竟用哪个视频会议好?
- 2022 面试必刷 461 道大厂架构面试真题汇总 + 面经 + 简历模板
- pool(二)——动手入门
- Unity中使用Google.Protobuf3,获取dll文件
- jy-10-SPRINGMYBATIS01——MyBatis-程祖红/刘苍松
- 毕业设计---基于人脸识别的Web端考勤系统
- java语言保留结构和联合_Java 语言中取消了联合概念,保留了结构概念。( )_学小易找答案...
- 用JAVA 做一个简易版的坦克大战(只实现基本功能)
- 倚天屠龙记君临天下_战斗系统
- 北京尚学堂退课退课,口碑还不错
- java qq邮箱服务器端口_java qq 邮箱发送错误以及端口号
- Pulmonary -- Detection1
- Java面试知识点一