Вторник, 07 Мая 2024, 11:30

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Java » Обновление картинки
Обновление картинки
grim122uaДата: Четверг, 02 Октября 2014, 22:32 | Сообщение # 1
уже был
Сейчас нет на сайте
Добрый день, столкнулся со следующей проблемой:вместо того что-бы рисовать картинку с новой позицией, делается ее дубликат, как быть?
Код

package pkg2dengine;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.Timer;

public class Main extends JFrame implements ActionListener{
        
Timer mainTimer = new Timer(20, this);

Image image;
Image image2;
BufferedImage bigImg;

private int p_frame = 0;

final int width = 32;
final int height = 32;
final int rows = 5;
final int cols = 5;
BufferedImage[] sprites = new BufferedImage[rows * cols];

public Main() throws IOException{
this.setTitle("2D Engine Test");
this.setSize(640,480);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);

mainTimer.start();

bigImg = ImageIO.read(new File("src\\res\\char3.png"));
for (int i = 0; i < rows; i++)
{
      for (int j = 0; j < cols; j++)
      {
          sprites[(i * cols) + j] = bigImg.getSubimage(
              j * width,
              i * height,
              width,
              height
          );
      }
}

addKeyListener(new KeyAdapter() {
              @Override
              public void keyPressed(KeyEvent evt) {
                  switch (evt.getKeyCode()) {
                      case KeyEvent.VK_UP:
                       
                          break;
                      case KeyEvent.VK_DOWN:

                          break;
                      case KeyEvent.VK_LEFT:

                          break;
                      case KeyEvent.VK_RIGHT:
                         if(p_frame < 4) p_frame += 1; else p_frame = 0;
                         System.out.println("sda");
                          break;
                  }
              }
          });
}

/*public void paint(Graphics g){
//g.drawString("Paint this!", 150, 100);   
ImageIcon i2 = new ImageIcon("char1.png");
image2 = i2.getImage();
int w = image2.getWidth(null);
int h = image2.getHeight(null);
g.drawImage(image2, 0, 0, 64, 64, 64, 64, 64, 64,  null); //1(2) - положение, 2(2) - размер,   
     

}*/

//The above line throws an checked IOException which must be caught.

int plus = 0;   

//Image img = new ImageIcon("src\\res\\H.png").getImage();
//@Override
public void paint(Graphics g){
   g = (Graphics2D) g;
   g.drawImage(sprites[p_frame], 0, 50+plus, 64, 64, null);
      //    if(p_frame < 4) p_frame += 1; else p_frame = 0;
          plus += 3;
          System.out.println("update");
           
}

public static void main(String[] args) throws IOException{
new Main(); }

      @Override
      public void actionPerformed(ActionEvent e) {
         repaint();
      }

}


Скрин:


Сам спрайт:


Сообщение отредактировал grim122ua - Четверг, 02 Октября 2014, 22:33
FadeBakerДата: Пятница, 03 Октября 2014, 03:18 | Сообщение # 2
JavaSE Game Developer
Сейчас нет на сайте
Проверь, точно ли вызывается метод actionPerformed.

Код
g = (Graphics2D) g;

Неправильно преобразовываешь. Так нужно:
Код
Graphics2D g2d = (Graphics2D) g;


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
grim122uaДата: Пятница, 03 Октября 2014, 22:15 | Сообщение # 3
уже был
Сейчас нет на сайте
Нет, не в этом дело. Проблема уже решилась.
Код

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
   
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.Timer;
   
public class Main extends JFrame implements ActionListener {
  boolean auto = true;
  boolean go = !false;
   
  Timer mainTimer = new Timer(100, this);
   
  Image image;
  Image image2;
  BufferedImage bigImg;
   
  private int p_frame = 0;
   
  final int width = 32;
  final int height = 32;
  final int rows = 5;
  final int cols = 5;
  BufferedImage[] sprites = new BufferedImage[rows * cols];
  protected int Y;
  protected int X;
   
  public Main() throws IOException {
   
   this.setTitle("2D Engine Test");
   this.setSize(640, 480);
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.setVisible(true);
   
   if (auto)
    mainTimer.start();
   
   bigImg = ImageIO.read(new File("char3.png"));
   for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
     sprites[(i * cols) + j] = bigImg.getSubimage(j * width, i
       * height, width, height);
    }
   }
   
   addKeyListener(new KeyAdapter() {
   
    @Override
    public void keyPressed(KeyEvent evt) {
     System.out.println(evt.getKeyCode());
     switch (evt.getKeyCode()) {
     case KeyEvent.VK_Z:
      auto = !auto;
      if (auto)
       mainTimer.start();
      else {
       mainTimer.stop();
      }
      break;
     case KeyEvent.VK_X:
      go = !go;
      break;
     case KeyEvent.VK_SPACE:
      Y = 0;
      X = 0;
      break;
     case KeyEvent.VK_UP:
      Y = -1;
      repaint();// increase speed
      break;
     case KeyEvent.VK_DOWN:
      Y = 1;
      repaint();// increase speed
      break;
     case KeyEvent.VK_LEFT:
      X = -1;
      repaint();// increase speed
      break;
     case KeyEvent.VK_RIGHT:
      X = +1;
      // p_frame = (p_frame + 1) % 4;
      repaint();// increase speed
      break;
     }
    }
   });
  }
   
  int plus = 0;
  private int plusV;
   
  // Image img = new ImageIcon("res\\Hero.png").getImage();
  @Override
  public void paint(Graphics g) {
   // super.paint(g);
   g = (Graphics2D) g;
   g.clearRect(100, 150, 164, 164);
   g.drawImage(sprites[p_frame], 100, 150, 164, 164, null);
   
   g.clearRect(0 + plus, 50 + plusV, 64, 64);
   g.drawImage(sprites[p_frame], 0 + plus, 50 + plusV, 64, 64, null);
   
   g.clearRect(310, 50, 64, 64);
   g.drawImage(sprites[p_frame], 310, 50, 64, 64, null);
   g.drawImage(sprites[p_frame], 210, 50, 64, 64, null);
   if (go)
    p_frame = (p_frame + 1) % 4;
   plus += 3 * X;
   plusV += 3 * Y;
   System.out.println("update " + p_frame);
  }
   
  public void actionPerformed(ActionEvent e) {
   repaint();
  }
   
}
Форум игроделов » Программирование » Java » Обновление картинки
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг