diff --git a/resources/chicken.png b/resources/chicken.png new file mode 100644 index 0000000..a30f4cf --- /dev/null +++ b/resources/chicken.png Binary files differ diff --git a/resources/test.png b/resources/test.png deleted file mode 100644 index a42be28..0000000 --- a/resources/test.png +++ /dev/null Binary files differ diff --git a/src/main/java/JumpGame.java b/src/main/java/JumpGame.java index 9026eae..caa33a5 100644 --- a/src/main/java/JumpGame.java +++ b/src/main/java/JumpGame.java @@ -1,5 +1,6 @@ import entities.*; import models.IModel; +import models.ModelType; import models.PlayerModel; import views.IView; import views.PlayerRenderer; @@ -22,17 +23,18 @@ //--------------------------------------------------------------- // new + private int i = 0; private ArrayList views = new ArrayList<>(); private ArrayList models = new ArrayList<>(); - private PlayerModel playerModel = new PlayerModel(ground); - //--------------------------------------------------------------- //--------------------------------------------------------------- // public void gravity(double y) { - // this.force.gravity(y); - // this.time.gravity(y); +// this.force.gravity(y); +// this.time.gravity(y); + PlayerModel playerModel = (PlayerModel) models.get(ModelType.PlayerModel); + playerModel.updateGravity(y); } //--------------------------------------------------------------- @@ -43,7 +45,8 @@ models.add(new PlayerModel(ground)); // view - views.add(new PlayerRenderer("resources/test.png")); + views.add(new PlayerRenderer("resources/chicken.png", 0.5)); + } //--------------------------------------------------------------- @@ -54,6 +57,7 @@ for (IModel model : models) { for (IView view : views) view.display(model); } + // Modelの更新 // // Space キーのインプット diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 15c69c2..296f047 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -9,6 +9,7 @@ public class Main { + private long variableYieldTime, lastTime; // ウィンドウハンドル private long hWnd; @@ -44,6 +45,7 @@ glfwSwapBuffers(hWnd); // バッファのスワップ glfwPollEvents(); // 入力とかイベントの取得 + } // 終了処理 @@ -80,13 +82,15 @@ // ウィンドウの表示 glfwShowWindow(hWnd); + + } //--------------------------------------------------------------- // 描画プロセス初期化 private void initRender() { GL.createCapabilities(); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 背景色設定 + glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // 背景色設定 // OpenGLの初期化 glEnable(GL_TEXTURE_2D); // 二次元テクスチャの有効化 @@ -99,5 +103,46 @@ public void delete() { jumpGame.delete(); } + + //--------------------------------------------------------------- + // + private void sync(int fps) { + if (fps <= 0) return; + + long sleepTime = 1000000000 / fps; // nanoseconds to sleep this frame + // yieldTime + remainder micro & nano seconds if smaller than sleepTime + long yieldTime = Math.min(sleepTime, variableYieldTime + sleepTime % (1000*1000)); + long overSleep = 0; // time the sync goes over by + + try { + while (true) { + long t = System.nanoTime() - lastTime; + + if (t < sleepTime - yieldTime) { + Thread.sleep(1); + }else if (t < sleepTime) { + // burn the last few CPU cycles to ensure accuracy + Thread.yield(); + }else { + overSleep = t - sleepTime; + break; // exit while loop + } + } + } catch (InterruptedException e) { + e.printStackTrace(); + }finally{ + lastTime = System.nanoTime() - Math.min(overSleep, sleepTime); + + // auto tune the time sync should yield + if (overSleep > variableYieldTime) { + // increase by 200 microseconds (1/5 a ms) + variableYieldTime = Math.min(variableYieldTime + 200*1000, sleepTime); + } + else if (overSleep < variableYieldTime - 200*1000) { + // decrease by 2 microseconds + variableYieldTime = Math.max(variableYieldTime - 2*1000, 0); + } + } + } //--------------------------------------------------------------- } \ No newline at end of file diff --git a/src/main/java/entities/Image2D.java b/src/main/java/entities/Image2D.java index 58bc4fd..b992457 100644 --- a/src/main/java/entities/Image2D.java +++ b/src/main/java/entities/Image2D.java @@ -31,8 +31,7 @@ if (tex != null) wh = new Pair<>((double) tex.getWidth(), (double) tex.getHeight()); else - wh = new Pair<>(30d, 30d); - + wh = new Pair<>(32d, 20d); rotation = 0.0; scale = 1.0; alpha = 1.0; @@ -49,6 +48,10 @@ this.position = position; } + public void setScale(double scale) { + this.scale = scale; + } + //--------------------------------------------------------------- //--------------------------------------------------------------- // diff --git a/src/main/java/entities/Sprite.java b/src/main/java/entities/Sprite.java index 0566eb5..37421b6 100644 --- a/src/main/java/entities/Sprite.java +++ b/src/main/java/entities/Sprite.java @@ -7,6 +7,7 @@ public class Sprite { private Pair positionValue; + private double scaleValue; private Texture texture; private Image2D img; @@ -26,10 +27,15 @@ this.positionValue = positionValue; } + public void setScaleValue(double scaleValue) { + this.scaleValue = scaleValue; + } + //--------------------------------------------------------------- //--------------------------------------------------------------- // public void draw() { + img.setScale(scaleValue); img.setPosition(positionValue); img.draw(); } diff --git a/src/main/java/entities/Velocity.java b/src/main/java/entities/Velocity.java index 9f218ea..22e9bf1 100644 --- a/src/main/java/entities/Velocity.java +++ b/src/main/java/entities/Velocity.java @@ -2,11 +2,11 @@ public class Velocity { - private Pair moveValue; - private Pair accelerationValue; + private Pair moveValue = new Pair<>(0d, 0d); + private Pair accelerationValue = new Pair<>(0d, 0d); private Position position; private Onground onground; - private Pair value; + private Pair value = new Pair<>(0d, 0d); //--------------------------------------------------------------- //--------------------------------------------------------------- diff --git a/src/main/java/models/ModelType.java b/src/main/java/models/ModelType.java new file mode 100644 index 0000000..604df21 --- /dev/null +++ b/src/main/java/models/ModelType.java @@ -0,0 +1,17 @@ +package models; + +//--------------------------------------------------------------- +// モデルのタイプ識別 +public class ModelType { + + public static final int PlayerModel = 0; + public static final int GroundModel = 1; + public static final int GameModel = 2; + + //--------------------------------------------------------------- + //--------------------------------------------------------------- + private ModelType() { + + } + //--------------------------------------------------------------- +} diff --git a/src/main/java/models/PlayerModel.java b/src/main/java/models/PlayerModel.java index bbdb8cc..ecc41f8 100644 --- a/src/main/java/models/PlayerModel.java +++ b/src/main/java/models/PlayerModel.java @@ -40,6 +40,10 @@ public void jump() { this.move.moveY(jumpPower); } - //--------------------------------------------------------------- + //--------------------------------------------------------------- + // + public void updateGravity(double gravity) { + this.force.gravity(gravity); + } } diff --git a/src/main/java/views/PlayerRenderer.java b/src/main/java/views/PlayerRenderer.java index 4da715c..559f06f 100644 --- a/src/main/java/views/PlayerRenderer.java +++ b/src/main/java/views/PlayerRenderer.java @@ -11,8 +11,9 @@ //--------------------------------------------------------------- //--------------------------------------------------------------- - public PlayerRenderer(String path) { + public PlayerRenderer(String path, double scale) { this.sprite = new Sprite(path); + this.sprite.setScaleValue(scale); } //---------------------------------------------------------------