Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie]Jak spowolnić ?


Rekomendowane odpowiedzi

Opublikowano

mam pytanie jak spowolnić ruszanie się obrazka :

if(e == 1) {
       cX++;
       f++;
       if(f == 170) {
            f = 0;
            e = 2;
        }
     }

   if(e == 2) {
       cX--;
       f++;
       if(f == 170) {
            f = 0;
            e = 1;
        }
       }
@Override
 public void paintComponent(Graphics g) {
  super.paintComponent(g);
  g.drawImage(image, cX, dY, null);
  g.drawString("FPS: " + FPS, 10, 20);
 }

 

a to cały kod:

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class myPanel extends JPanel implements Runnable {
    
    private int currentFPS = 0;
    public static int FPS = 0;
    private long start = 0;
    public static Thread thread;
    private Image image = new ImageIcon("IMG/Tarreria.png").getImage();
    public static int cX = 50;
    public static int dY =  10;
    int e = 1;
    int f = 0;
    
 public myPanel() {
     if(thread == null) {
         thread = new Thread(this);
         thread.start();
         }
     }
 public void run() {
  while (true) {
   update();
   repaint();
   try {
    Thread.sleep(5);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }

 public void update() {
  currentFPS++;
  if(System.currentTimeMillis() - start >= 1000) {
   FPS = currentFPS;
   currentFPS = 0;
   start = System.currentTimeMillis();
  }
   if(e == 1) {
       cX++;
       f++;
       if(f == 170) {
            f = 0;
            e = 2;
        }
     }

   if(e == 2) {
       cX--;
       f++;
       if(f == 170) {
            f = 0;
            e = 1;
        }
       }
}

 @Override
 public void paintComponent(Graphics g) {
  super.paintComponent(g);
  g.drawImage(image, cX, dY, null);
  g.drawString("FPS: " + FPS, 10, 20);
 }
}
 
Opublikowano

Kod jest krótko mówiąc strasznie kopnięty. Aby poruszać obrazkiem, powinieneś stworzyć tzw. deltę, która informowałaby o interwale pomiędzy 1 klatką, a drugą. Potem, mnożyłbyś jakąś liczbę razy deltę, w zależności jak szybko obrazek miałby się przesuwać. Jeśli o 1 pixel na milisekundę, to razy 1, itd.. Potem pomnożoną liczbę dodawał do x/y obrazka. W kodzie jest też masa innych błędów, takich jak strasznie zagmatwana ta część kodu:

   if(e == 1) {
       cX++;
       f++;
       if(f == 170) {
            f = 0;
            e = 2;
        }
     }

   if(e == 2) {
       cX--;
       f++;
       if(f == 170) {
            f = 0;
            e = 1;
        }
       }

Mam nadzieje że pomogłem. Wesołych świąt.

708121422388637873334.png

Opublikowano

Kod jest krótko mówiąc strasznie kopnięty. Aby poruszać obrazkiem, powinieneś stworzyć tzw. deltę, która informowałaby o interwale pomiędzy 1 klatką, a drugą. Potem, mnożyłbyś jakąś liczbę razy deltę, w zależności jak szybko obrazek miałby się przesuwać. Jeśli o 1 pixel na milisekundę, to razy 1, itd.. Potem pomnożoną liczbę dodawał do x/y obrazka. W kodzie jest też masa innych błędów, takich jak strasznie zagmatwana ta część kodu:

Mam nadzieje że pomogłem. Wesołych świąt.

 

Mógłbyś podać jakiś przykład z wykorzystaniem tego o czym napisałeś?

2mmtzeu.jpg

Opublikowano

Bardzo proszę. Na szybko napisane - bez wektorów, itd. Grafika z lwjgl, w podstawowym sposobie renderowania.

import static org.lwjgl.opengl.GL11.*;

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;


public class Game {
	
	public static final int FRAME_WIDTH = 500;
	public static final int FRAME_HEIGHT = 500;
	
	private long lastUpdate = System.currentTimeMillis();
	
	private long getDelta(){
		return System.currentTimeMillis() - lastUpdate;
	}
	private void updateLastUpdate(){
		this.lastUpdate = System.currentTimeMillis();
	}
	
	public static void main(String[] args) {
		new Game().start();

	}
	
	private Quad quad = new Quad(200, 200, 100, 100, 0.1, 0);
	
	public void start(){
        try {
            Display.setDisplayMode(new DisplayMode(FRAME_WIDTH, FRAME_HEIGHT));
            Display.setTitle("dupa");
            Display.create();
        } catch (LWJGLException e) {
        }
        glMatrixMode(GL_PROJECTION);
        glOrtho(0, FRAME_WIDTH, FRAME_HEIGHT, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);
        
		while(!Display.isCloseRequested()){
			glClear(GL_COLOR_BUFFER_BIT);
			
			update(getDelta());
			render();
			
            Display.update();
            Display.sync(60);
		}
	}
	
	public void update(long delta){
		updateLastUpdate();
		quad.update(delta);
	}
	
	public void render(){
		quad.draw();
	}
	
	private class Quad{
		private double x, y, width, height;
		private double speedX, speedY;
		public Quad(int x, int y, int w, int h, double speedX, double speedY) {
			this.x = x;
			this.y = y;
			this.width = w;
			this.height = h;
			this.speedX = speedX;
			this.speedY = speedY;
		}
		public void update(long delta){
			this.x += delta * speedX;
			this.y += delta * speedY;
		}
		public void draw(){
			glRectd(x, y, x + width, y + height);
		}
	}
	

}

708121422388637873334.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...