1. 대략적인 그림 살펴보기
일단 폴더를 보면 src > engine > Car.java 파일이다.

2. package와 class 살펴보기
package engine;
import controllers.Controller;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
| package engine; | 현재 파일은 engine 패키지에 속한다 |
| import controllers.Controller; | 게임 객체를 제어하기 위한 인터페이스 제공 (위에서 만든 파일) |
| import java.awt.Graphics2D; | 그래픽 객체를 그리는데 사용되는 클래스 |
| import java.awt.image.BufferedImage; | 이미지 처리 , 메모리 내 이미지를 나타냄 |
| import java.io.File; | 파일 및 디렉토리 경로를 나타냄 |
| import javax.imageio.ImageIO; | 이미지를 파일로 읽거나 쓰는데 사용 |
3. 변수 살펴보기
| Controller m_controller | 자동차의 움직임, 동작 결정 ex) 입력을 받으면 해당 방향으로 자동차를 이동시키는 것 |
| BufferedImage m_img | 자동차의 그래픽 이미지를 저장 |
| double m_alpha | 회전 각도 |
| double m_speed | 현재 속도 |
| double m_max_velocity | 최대 속도 |
| double m_min_velocity | 최소 속도 |
| RotatedRectangle m_collision_box | 자동차의 충돌박스를 나타냄 |
변수 이름을 잘 짓는 것도 정말 중요 !
▷ 전체코드
더보기
package engine;
import controllers.Controller;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
/**
*
* @author santi
*/
public class Car extends GameObject {
Controller m_controller;
BufferedImage m_img;
// physics:
double m_alpha; // rotation
double m_speed;
double m_max_velocity = 250;
double m_min_velocity = -100;
RotatedRectangle m_collision_box;
public Car(String graphicsFileName, double x, double y, double alpha, Controller c) throws Exception {
m_img = ImageIO.read(new File(graphicsFileName));
m_x = x;
m_y = y;
m_alpha = alpha;
m_controller = c;
m_collision_box = new RotatedRectangle(m_x, m_y, m_img.getWidth()/2, m_img.getHeight()/2, m_alpha);
}
public double getAngle() {
return m_alpha;
}
public double getSpeed() {
return m_speed;
}
public void update(Game game, double delta_t) {
double controlVariables[] = {0,0,0};
m_controller.update(this, game, delta_t, controlVariables);
// remember the old posision, in case there is a collision:
double old_x = m_x;
double old_y = m_y;
double old_angle = m_alpha;
// update velocity, position and angle:
double brake_strength = (m_speed>0 ? 250:100);
double acceleration = controlVariables[Controller.VARIABLE_THROTTLE]*100 -
controlVariables[Controller.VARIABLE_BRAKE]*brake_strength;
m_speed*=0.99; // drag
m_speed += acceleration * delta_t;
if (m_speed>m_max_velocity) m_speed = m_max_velocity;
if (m_speed<m_min_velocity) m_speed = m_min_velocity;
m_x += Math.cos(m_alpha)*m_speed * delta_t;
m_y += Math.sin(m_alpha)*m_speed * delta_t;
double turning_rate = controlVariables[Controller.VARIABLE_STEERING]*m_speed;
m_alpha+=turning_rate*delta_t/50;
// update the collision box:
m_collision_box.C.x = m_x;
m_collision_box.C.y = m_y;
m_collision_box.ang = m_alpha;
// check for collisions:
if (game.collision(this) != null) {
m_x = old_x;
m_y = old_y;
m_alpha = old_angle;
m_speed = 0;
m_collision_box.C.x = m_x;
m_collision_box.C.y = m_y;
m_collision_box.ang = m_alpha;
}
}
public void draw(Graphics2D g) {
Graphics2D gg = (Graphics2D) g.create();
gg.translate(m_x, m_y);
gg.rotate(m_alpha);
gg.translate(-m_img.getWidth()/2,-m_img.getHeight()/2);
gg.drawImage(m_img, 0, 0, null);
gg.dispose();
}
public RotatedRectangle getCollisionBox() {
return m_collision_box;
}
}
'Game AI & Unity > Java Steering game' 카테고리의 다른 글
| [Game AI][Steering Behavior] 6. engine.Game.java (0) | 2024.03.20 |
|---|---|
| [Game AI][Steering Behavior] 5. engine.Car.java (0) | 2024.03.20 |
| [Game AI][Steering Behavior] 3. controllers (0) | 2024.03.20 |
| [Game AI][Steering Behavior] 2. 대략적인 그림 살펴보기 (0) | 2024.03.20 |
| [Game AI][Steering Behavior] 1. 코드 실행해보기 (0) | 2024.03.20 |