人生ゲーム漬けなダメ人間のBlog


ここなのHOMEページ
ここなのプロフィールページ
昔の日記:fUteiKi_niKKi(old)
コース、を走るよ!

とりあえずコースを埋め込むところまで。今回はコース制作のためのツール郡にも手を出していたので、ちょっと時間がかかってしまったわぃ。


当たり判定用のコースは外枠だけ作って、判定用に割る作業は自動化してます。





次は本番用のアニメーション制御とコース中のギミックとかを。特にバギーなのにジャンプがないのはちょっと寂しいので。。。

ソース(本体)



/*---------------------
初期設定
----------------------*/
//衝突要
HIT_cash = 0;
HIT_penaM = 0;

//移動制御関数
MYcarX = 500;MYcarY = 300;
STR_fstX= 500;STR_fstY= 300;
mX = 0;mY = 0;
mbX = 0;mbY = 0;

//カメラ・スケール制御
SC_cmX = 0;SC_cmY = 0;
SC_hf = 20;

//スピード制御
MOV = 0;BTT = 0;
AcsMAX = 14.0;AcsUP = 0.1;
Brk_1 = 0.6;Brk_2 = 0.6;
Cub_1 = 3.0;Cub_2 = 2.0;
Clash = 27.0;

//回転制御
ROT =90;TT = 12.0;ROT_tm = 0;
ROT_Df = 0;
ROT_DfMAX = 94;ROT_Dfmin = 6.0;
RR = 18.0;
ROT_MAX = RR;ROT_MIN = 6.0;

//円周率
PI = Math.PI;PI_r = 0;PI_rD = 0;

//キー制御
keyL = 0;keyR = 0;keyBack = 0;

//アニメーション制御
anmFR = 0;divR = 12;
r_DIV = 360/ divR;

//ステージ移動用
STR_crqX = 0;STR_crqY = 0;

//マップ大きさ指定
STR_stW = 640 * STR_road._xscale;//STR_road._width;
STR_stH = 720 * STR_road._yscale;//STR_road._height;

//コースデータ
CUR = new Array();
// [A-X,A-Y,B-X,B-Y]
CUR[ 0] = [38.55,235.2];
CUR[ 1] = [233.5,297.25];
CUR[ 2] = [368.15,45.9];
CUR[ 3] = [546.55,96.95];
CUR[ 4] = [504.55,7.15];
CUR[ 5] = [571.45,83.15];
CUR[ 6] = [618.85,9.45];
CUR[ 7] = [598.7,83.9];
CUR[ 8] = [708.8,25.55];
CUR[ 9] = [615.05,93.7];
CUR[10] = [769.25,85];
CUR[11] = [620.8,109.6];
CUR[12] = [791.25,174.25];
CUR[13] = [621.5,125.4];
CUR[14] = [660.3,456.9];
CUR[15] = [430.85,373.55];
CUR[16] = [558.25,554.75];
CUR[17] = [389.7,416];
CUR[18] = [400.15,590.8];
CUR[19] = [320.45,442.9];
CUR[20] = [269.4,591.7];
CUR[21] = [255.95,440.4];
CUR[22] = [145.55,573.35];
CUR[23] = [215.7,424.5];
CUR[24] = [51.05,526.25];
CUR[25] = [194.2,394.3];
CUR[26] = [9.95,419.15];
CUR[27] = [194.55,351.6];
CUR[28] = [16.1,299.2];
CUR[29] = [209.25,323.8];
CUR[30] = [38.55,235.2];
CUR[31] = [233.5,297.25];
CUR[32] = [38.55,235.2];
CUR[33] = [233.5,297.25];

//角度データ
CU_rot = [
//0-1
92.57,8.37,
149.76,347.68,
150.74,71.56,
199.63,70.25,
241.99,74.6,
//10-11
239.78,94.52,
239.43,175.95,
285.21,249.24,
300.39,204,
301.01,197.73,
//20-21
322.68,185.25,
340.91,247.46,
52.11,3.32,
42.61,12.65,
69.49,41.65,
//30-31
0,0,
0
];

CUR_MAX = CUR.length - 3;

/*--------------------
ゲーム設定
----------------------*/
function GameINI(){

NOW_Dep = _root.getNextHighestDepth();
createTextField("test_tx",NOW_Dep+1,10,10,48,48);

keisan(); //計算処理
posit(); //位置確定
}

GameINI(); //ゲーム設定の実行

/*--------------------
毎フレーム処理
----------------------*/
onEnterFrame = function(){

keisan(); //計算処理
hit_RD(); //当たり判定
posit(); //位置確定
MAIN(); //メイン処理

test_tx.text = HIT_ID;

};

/*----------------------
桁そろえ
------------------------*/
function intup(){
SC_cmX = Math.floor(SC_cmX);
SC_cmY = Math.floor(SC_cmY);
STR_crqX = Math.floor(STR_crqX);
STR_crqY = Math.floor(STR_crqY);
AcsUP = Math.floor(AcsUP * 100) / 100;
MOV = Math.floor(MOV * 100) / 100;
ROT_Df = Math.floor(ROT_Df * 100) / 100;
ROT = Math.floor(ROT * 100) / 100;
BTT = Math.floor(BTT * 100) / 100;
MYcarX = Math.floor(MYcarX * 100) / 100;
MYcarY = Math.floor(MYcarY * 100) / 100;
}

/*--------------------
メイン処理
----------------------*/
function MAIN(){

//壁衝突時の処理
if(HIT_tr == 0){
ROT = HIT_cash;MOV = 4;ROT_Df = 0;
keyL = 0;
keyR = 0;
keyBack = 0;
keyBTT = 0;
}

//数値計算ラクにする
if(ROT < 0){ROT = 360;}
if(ROT > 360){ROT = 0;}

if(MOV < 0){MOV = 0.3;}

//ブースト処理
if(BTT > 0){BTT -= 0.3;}
else{BTT = 0;}

//ブースト加速
if(keyBTT & !Key.isDown(38)){
if(BTT == 0){BTT += 5;}
}
//勝手にすすむ

if(AcsUP < 4){AcsUP += 0.01;}
if(MOV < AcsMAX){MOV += AcsUP;}

//桁整理
intup();

//ブレーキ
if(keyBack & Key.isDown(40)){
AcsUP = 0.4;
if(MOV < 0){MOV += 0;}else{MOV -= 0.8;}
}

//左へ曲がるとき
if(keyL & Key.isDown(37)){
AcsUP= Brk_1;
if(ROT_tm < TT){
ROT -= Cub_1;
ROT_tm ++;
}
else{
MOV -= Brk_2;
if(ROT_MAX > ROT_MIN){ROT_MAX -= Cub_2;}
ROT -= ROT_MAX;
if(ROT_Df > (ROT_DfMAX * -1)){ROT_Df -= ROT_Dfmin;}
}
}
//ボタンを離したときの処理
else if(keyL & !Key.isDown(37)){
ROT_MAX = RR;
ROT_tm = 0;
}
else if(!keyL == !Key.isDown(37)){
if(ROT_Df < 0){ROT_Df += ROT_Dfmin;ROT += ROT_MIN/2;}
}

//右へ曲がるとき
if(keyR & Key.isDown(39)){
AcsUP= Brk_1;
if(ROT_tm < TT){
ROT += Cub_1;
ROT_tm ++;
}
else{
MOV -= Brk_2;
if(ROT_MAX > ROT_MIN){ROT_MAX -= Cub_2;}
ROT += ROT_MAX;
if(ROT_Df < (ROT_DfMAX * 1)){ROT_Df += ROT_Dfmin;}
}
}
//ボタンを離したときの処理
else if(keyR & !Key.isDown(39)){
ROT_MAX = RR;
ROT_tm = 0;
}
else if(!keyR == !Key.isDown(39)){
if(ROT_Df > 0){ROT_Df -= ROT_Dfmin;ROT -= ROT_MIN/2;}
}

keyL = Key.isDown(37);
keyR = Key.isDown(39);
keyBack = Key.isDown(40);
keyBTT = Key.isDown(38);

}

/*----------------------
計算処理
------------------------*/
function keisan(){
//カメラ制御
SC_cmX = 0; //(MYcarX - SC_hf)/2;
SC_cmY = 0; //(MYcarY - SC_hf)/3;
//角度変換
PI_r = ROT * (Math.PI / 180);
PI_rD= (ROT - ROT_Df) * (Math.PI / 180);
//通常時
mX = Math.floor(MOV * Math.sin(PI_rD) * 10) / 10;
mY = Math.floor(MOV * Math.cos(PI_rD) * 10) / 10;
//ドリフト時
mbX = Math.floor(BTT * Math.sin(PI_r) * 10) / 5;
mbY = Math.floor(BTT * Math.cos(PI_r) * 10) / 2;
//自機位置確定
MYcarX += mX + mbX;
MYcarY -= mY + mbY;
//画面スクロール
STR_crqX = MYcarX - STR_fstX + SC_cmX;
STR_crqY = MYcarY - STR_fstY + SC_cmY;
//スクロールの制御
if(STR_crqX < 0){STR_crqX = 0;}
if(STR_crqX > STR_stW - Stage.width)
{STR_crqX = STR_stW - Stage.width;}

if(STR_crqY < 0){STR_crqY = 0;}
if(STR_crqY > STR_stH - Stage.height)
{STR_crqY = STR_stH - Stage.height;}

//アニメーション用計算
_root.my_pic.gotoAndStop(anmFR);
anmFR = Math.floor(ROT / r_DIV)+1;
}

/*----------------------
移動値の確定
------------------------*/
function posit(){
//自機の移動処理
_root.my_HIT._x = MYcarX - STR_crqX;
_root.my_HIT._y = MYcarY - STR_crqY;
_root.my_HIT._rotation = ROT;
_root.my_pic._x = _root.my_HIT._x;
_root.my_pic._y = _root.my_HIT._y;
//背景位置
// STR_map._x = STR_crqX * -1;
// STR_map._y = STR_crqY * -1;

STR_road._x = STR_crqX * -1;
STR_road._y = STR_crqY * -1;
}

/*------------------------
コース描画との接触判定
--------------------------*/
function hit_RD(){

if(HIT_tr != 0){HIT_cash = HIT_tr;}
HIT_tr = 0;

for(i=0;i < CUR_MAX;i++){
HIT_posi = STR_road["ROD" + i].hitTest(_root.my_HIT._x,_root.my_HIT._y,true);
if(HIT_posi == true){HIT_tr = CU_rot[i];HIT_ID = i;}
}

}

ソース(コース描画)



/*----------------------
コースの当たり判定を作る
データはルートから取得
----------------------*/

//コース作成
function draw_map(){

for(i=0;i<(_root.CUR_MAX);i++){
if(i%2 == 0){
vecA_X = (_root.CUR[i+0][0] - _root.CUR[i+1][0]) / 2;
vecA_Y = (_root.CUR[i+0][1] - _root.CUR[i+1][1]) / 2;
vecB_X = (_root.CUR[i+2][0] - _root.CUR[i+3][0]) / 2;
vecB_Y = (_root.CUR[i+2][1] - _root.CUR[i+3][1]) / 2;

pointA_X = _root.CUR[i+0][0] - vecA_X;
pointA_Y = _root.CUR[i+0][1] - vecA_Y;
pointB_X = _root.CUR[i+2][0] - vecB_X;
pointB_Y = _root.CUR[i+2][1] - vecB_Y;
}
else{
pointA_X = _root.CUR[i+0][0] + vecA_X;
pointA_Y = _root.CUR[i+0][1] + vecA_Y;
pointB_X = _root.CUR[i+2][0] + vecB_X;
pointB_Y = _root.CUR[i+2][1] + vecB_Y;
}

this.ROtmp = createEmptyMovieClip("ROD" + i,100+i);
this["ROD" + i].lineStyle(2,0x0000FF);
this["ROD" + i].beginFill(0xFFFFFF);
if(i%2 == 0){
this["ROD" + i].moveTo(_root.CUR[i+0][0],_root.CUR[i+0][1]);
this["ROD" + i].lineTo(pointA_X,pointA_Y);
this["ROD" + i].lineTo(pointB_X,pointB_Y);
this["ROD" + i].lineTo(_root.CUR[i+2][0],_root.CUR[i+2][1]);
this["ROD" + i].lineTo(_root.CUR[i+0][0],_root.CUR[i+0][1]);
}
else{
this["ROD" + i].moveTo(pointA_X,pointA_Y);
this["ROD" + i].lineTo(pointB_X,pointB_Y);
this["ROD" + i].lineTo(_root.CUR[i+2][0],_root.CUR[i+2][1]);
this["ROD" + i].lineTo(_root.CUR[i+0][0],_root.CUR[i+0][1]);
this["ROD" + i].moveTo(pointA_X,pointA_Y);
}
this["ROD" + i].endFill();
}

}

draw_map();



| ここな | 制作 | comments(1) | trackbacks(0) |

Comment

男性派遣?リアルラブドール?ヮヶヮヵ
だがとりあえずお試しエントリーしてみた。
name (2010/11/23 7:30 PM)










Trackback
url: http://kurobee.kokona.lomo.jp/trackback/1037896

new | top | old


累計 本日 昨日

無料ブログ作成サービス JUGEM
(C) 2018 ブログ JUGEM Some Rights Reserved.
-Paging Navigation-

new | old

▲PageTopへ▲