Мерцание .gif вправо налево с KeyDapterJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Мерцание .gif вправо налево с KeyDapter

Сообщение Anonymous »

Это мой код для видеоигры, когда я хочу, чтобы персонаж перемещался вправо, влево, с помощью клавиши со стрелкой, влево и вправо
KeyAdapterPaint.java
`

Код: Выделить всё

package com.videogame.control;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

import com.videogame.image.ImageOnGui;
import com.videogame.movementcaracter.Motion;

public class KeyEventAdapterPaint extends KeyAdapter {
private PaintComponent imagePaint;
private JFrame window;
private Image imageLeft;
private Image imageRight;
private int x;

public KeyEventAdapterPaint(JFrame window,Image imageLeft,Image imageRight) {
super();
this.imageLeft=imageLeft;
this.imageRight=imageRight;
this.imagePaint=new PaintComponent(0,0);
x=0;
}

public void putPanel(JFrame window) {
imagePaint.setLayout(new BorderLayout());
imagePaint.setPreferredSize(new Dimension(2000, 150));
imagePaint.setDoubleBuffered(true);
window.add(imagePaint);
}

@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x=x+1;
imagePaint.setX(x);
imagePaint.setImage(imageRight);
imagePaint.repaint();
}
if(e.getKeyCode()==KeyEvent.VK_LEFT){
x=x-1;
imagePaint.setX(x);
imagePaint.setImage(imageLeft);
imagePaint.repaint();
}
}
}

PaintComponent.java

Код: Выделить всё

package com.videogame.control;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.JLabel;
import javax.swing.JPanel;

public class PaintComponent extends JLabel{
private static final long serialVersionUID = 1L;

private Image image;
private int x;
private int y;

public PaintComponent(int x,int y) {
this.image=null;
this.x=x;
this.y=y;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(getImage(), x, y, null);
}

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}

public Image getImage() {
return image;
}

public void setImage(Image image) {
this.image = image;
}

}
ControlLeft.java
package com.videogame.control;

import java.awt.event.KeyListener;

import javax.swing.JFrame;

import com.videogame.movementcaracter.Motion;

public class ControlLeft extends Control {

public ControlLeft(JFrame window, Motion motion, KeyListener keyControl) {
super(window);
setMotion(motion);
setKeyControl(keyControl);
}

@Override
public void putDirection() {
getWindow().addKeyListener(getKeyControl());
}
}
< /code>
init.java
package com.videogame.controlInit;

import java.awt.Dimension;
import java.util.ArrayList;

import javax.swing.JFrame;

import com.videogame.image.ImageOnGui;
import com.videogame.movementcaracter.Dimen;
import com.videogame.movementcaracter.MotionDirect;
import com.videogame.movementcaracter.Motion;
import com.videogame.movility.FigureBackwards;
import com.videogame.movility.FigureDirect;
import com.videogame.control.Control;
import com.videogame.control.ControlLeft;
import com.videogame.control.KeyEventAdapterLeft;
import com.videogame.control.KeyEventAdapterPaint;

public class Init {

public static void main(String[] args) {
JFrame window = new JFrame("ventana");
window.setSize(new Dimension(2000, 2000));
ArrayList controls = new ArrayList();
ImageOnGui imageLeft=new ImageOnGui("manWalkingLeft.gif");
ImageOnGui imageRight=new ImageOnGui("manWalkingRight.gif");
FigureBackwards figureBackwards= new FigureBackwards(0,0);
FigureDirect figureDirect = new FigureDirect(0,0);
Motion motionDirect1= new MotionDirect(new Dimen(), figureDirect,figureBackwards);
KeyEventAdapterLeft keyL=new KeyEventAdapterLeft(window,motionDirect1,imageLeft,imageRight);
KeyEventAdapterPaint keyP=new KeyEventAdapterPaint(window,imageLeft.getImageIcon().getImage(),imageRight.getImageIcon().getImage());
controls.add(new ControlLeft(window,motionDirect1,keyP));
for (Control con : controls) {
con.putDirection();
}
imageLeft.print(window);
keyP.putPanel(window);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
window.createBufferStrategy(3);
}
}`
< /code>
Когда я выполняю основной метод,
.gif мерцает, когда я двигаю право налево, на клавиатуре. Я хочу избежать мерцания.
Любая помощь я поблагодарил

Подробнее здесь: https://stackoverflow.com/questions/797 ... keyadapter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»