그래서 나는 마리오가 점프하는이 작은 프로젝트를 가지고있다. 그러나 나는 그것을 다시 칠하는 방법을 알아낼 수 없다. 클릭 한 후 Main 클래스에서 처리하면 전체 점프가 매우 번쩍 거립니다.다시 칠하는 법을 알 수 없다
나는 점프 기능의 끝에서 그것을 시도했다. 그러나 그것은 그렇게 일하지 않았다.
홈페이지 : 여기
내 코드입니다package klassid;
import java.awt.Toolkit;
import java.awt.Image;
import java.awt.Graphics;
public class Hero {
static Main main;
int y;
Image pilt = Toolkit.getDefaultToolkit().getImage("../mario.png");
private double height = 0, speed = 4;
public static final double gravity = 9.81;
private double x = 25;
private boolean left = false, right = false, up = false;
public Hero(int x, int y){
this.x = x;
this.y = y;
}
public void render(Graphics g, Main pohiKlass){
g.drawImage(pilt, (int) (x), (int) (500-(height*100)), 50, 50, pohiKlass);
}
public void the_jump() {
long previous = 0, start = 0;
while(true){
start= System.nanoTime();
if(previous != 0 && up){
double delta = start - previous;
height += (delta/1000000000) * speed;
speed -= (delta/1000000000) * gravity;
}
if(left)
x -= 3;
if(right)
x += 3;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(height < 0){
height = 0;
speed = 4;
up = false;
}
previous = start;
repaint();
}
}
public void move(int i){
if(i == 38)
up=true;
if(i == 37)
left=true;
if(i == 39)
right=true;
}
public void move2(int i){
if(i == 37)
left=false;
if(i == 39)
right=false;
}
}
가 나는 또한 the_jump 함수에서의 paintComponent에 액세스하려고하지만 그것은 작동하지 않았다
package klassid;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.Timer;
public class Main extends JComponent implements KeyListener, ActionListener{
static Hero hero;
Timer t = new Timer(500,this);
public static void main(String[] args) {
JFrame aken = new JFrame("Simple jumping simulator");
aken.setSize(600, 600);
aken.getContentPane().setBackground(new Color(255,255,255));
aken.getContentPane().add(new Main());
aken.setVisible(true);
aken.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
hero.the_jump();
}
public Main(){
addKeyListener(this);
setFocusable(true);
t.start();
hero = new Hero(0, 320);
}
public void paintComponent(Graphics g){
hero.render(g, this);
g.setColor(Color.GREEN);
g.fillRect(0, 550, 600, 2);
}
@Override
public void keyPressed(KeyEvent e) {
hero.move(e.getKeyCode());
}
public void keyReleased(KeyEvent e) {
hero.move2(e.getKeyCode());
}
public void keyTyped(KeyEvent e) {}
public void actionPerformed(ActionEvent e) {}
}
그리고 나의 영웅 클래스
어떤 종류의 매개 변수가 필요한지 전혀 알지 못합니다.이 혼란은 어떻게 풀릴 수 있습니까?
super.paintComponent(g);
JComponent에 당신을 위해 많은 일을 할 것입니다,하지만 당신은 명시 적으로 그렇게 할 수있는 슈퍼 클래스의 메소드를 호출해야합니다
반복해서 반복하면 성능이 크게 향상됩니까? – Veske
CPU에서 그래픽으로 작업하는 것이 이상적이지 않습니다. 테스트를 해보고 성능면에서 한계가 있는지 확인하는 것이 좋습니다. 타이머 값으로 항상 미세 조정할 수 있습니다 (33은 초당 약 30 프레임을 제공하기 때문에 좋은 출발점 일 수 있습니다). – Nathan