MAGI JAVA -Make a game in Java-
JAVA Game作成講座 006回
摩擦を加えて停止させる


kouza006 jarファイル



[今回追加したもの]
・PlayerPlatformクラスを修正
摩擦による移動制御を追加
キーから手を離すと摩擦がかかって移動を止めるようにした


[PlayerPlatformの変更点]
public class PlayerPlatform {

private final double FRICTION=0.5;
private final int ACCELERATION=1;
private final int MAPSIZEMIN=800;
private final int MAP_WIDTH_MIN=800;
private final int MAP_HEIGHT_MIN=608;


final定義でいくつか固定の数値を定義
ACCELERATIONは使わないかもしれない…。
今回使うのはFRICTIONだけ。
キーから手を離していると、毎ループvx or vyに0.5をかける。
vx等が0.1以下で0にするので、最大速度の8で動いていても、
4, 2, 1, 0.5, 0.25, 0.125, 0.06…の7ループで止まる。


[PlayerPlatform 61行目 keyCheck関数]

vx--,vx++など直接いじっていたのをvxPlusに仮格納し、
vx+=vxPlus; の段階で増減するようにした。
なぜこうしたかというと、左右(上下)同時押ししたときに変な動きになるのを防止するため。
右向いたまま左移動したり、左向いて右に移動したり、
マイケルジャクソンのムーンウォークみたいになるから。

public void keyCheck(boolean[] kPTbl) {

keyPressTbl=kPTbl;
int vxPlus=0;
int vyPlus=0;
if(isKeyCodePressed(KeyEvent.VK_UP)){
shift=8;
vyPlus=-1;
frictionY=1;
}
if(isKeyCodePressed(KeyEvent.VK_DOWN)){
shift=2;
vyPlus=1;
frictionY=1;
}
if(isKeyCodePressed(KeyEvent.VK_LEFT)){
shift=4;
vxPlus=-1;
frictionX=1;
}
if(isKeyCodePressed(KeyEvent.VK_RIGHT)){
shift=6;
vxPlus=1;
frictionX=1;
}
vx+=vxPlus;
vy+=vyPlus;
//↑、↓キーをどちらも押していない場合、vyに摩擦を発生させる。
if (isKeyCodePressed (KeyEvent.VK_UP) == false && isKeyCodePressed (KeyEvent.VK_DOWN)==false) {
frictionY=FRICTION;
}
//←、→キーをどちらも押していない場合、vxに摩擦を発生させる。
if (isKeyCodePressed (KeyEvent.VK_LEFT) == false && isKeyCodePressed (KeyEvent.VK_RIGHT)==false) {
frictionX=FRICTION;
}

}

大分RPGのキャラクター動作に近くなってきた。

次は移動中に歩行アニメーションをさせるようにする。
今回の処理に比べれば修正箇所は少ない。

・トップページへ戻る
inserted by FC2 system