したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

スクリプト覚書

1ここな ◆noLKOKOKEo:2010/08/25(水) 00:08:26
超俺専用スクリプトコピペ

mX = 0;
mY = 0;
MOV = 0;
ROT = 1;
HIT = false;
PI = Math.PI;
PI_d = 0;

onEnterFrame = function(){

if(Key.isDown(38)){MOV += 0.1;}
if(Key.isDown(40)){MOV -= 0.1;}

if(Key.isDown(37)){ROT -= 3;}
if(Key.isDown(39)){ROT += 3;}

if(ROT < 1){ROT = 360;}
if(ROT > 361){ROT= 1;}

keisan();
dousa();
atari();

trace(MOV+"/"+mX+","+mY+" "+ROT+"/"+PI_d+" "+HIT);
HIT = false;
};

function keisan(){

PI_r = ROT * (Math.PI / 180);

mX = Math.floor(MOV * Math.sin(PI_r) * 10) / 10;
mY = Math.floor(MOV * Math.cos(PI_r) * 10) / 10;

}

function dousa(){

_root.test._x += mX;
_root.test._y -= mY;
_root.test._rotation = ROT;

}

function atari(){

if(_root.hani.hitTest(_root.test._x,_root.test._y,true)){
HIT = true;
PI_d =(PI_r * -1)/(Math.PI / 180);
ROT -= PI_d;

PI_d = 1;
}

}

角度反射が上手くいかん。やはりラジアン制御せなあかんのか。

2ここな@携帯:2010/08/25(水) 00:21:38
>>1

デグリー変換が間違ってる。180/πだお

まとまったらこいつらも関数化すっかな

3ここな ◆noLKOKOKEo:2010/08/25(水) 13:05:15
加速と減速をつけただけ。
コリジョンについてはまだ考え中。

mX = 0;
mY = 0;
MOV = 0;
ROT = 1;
HIT = false;
PI = Math.PI;
PI_d = 0;

onEnterFrame = function(){

// if(Key.isDown(38)){MOV += 0.1;}
if(MOV < 6){MOV += 0.08;}

if(Key.isDown(40)){

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

}

if(Key.isDown(37)){
ROT -= 4;
if(MOV <= 0){MOV = 0;}
else {
MOV -= 0.092;
mX -= 0.05;
}
}

if(Key.isDown(39)){
ROT += 4;
if(MOV <= 0){MOV = 0;}
else {
MOV -= 0.092;
mX += 0.05;
}
}

if(ROT < 1){ROT = 360;}
if(ROT > 361){ROT= 1;}

keisan();
dousa();
atari();

trace(MOV+"/"+mX+","+mY+" "+ROT+"/"+PI_d+" "+HIT);
HIT = false;
};

function keisan(){

PI_r = ROT * (Math.PI / 180);

mX = Math.floor(MOV * Math.sin(PI_r) * 10) / 10;
mY = Math.floor(MOV * Math.cos(PI_r) * 10) / 10;

}

function dousa(){

_root.test._x += mX;
_root.test._y -= mY;
_root.test._rotation = ROT;

}

function atari(){

if(_root.hani.hitTest(_root.test._x,_root.test._y,true)){
HIT = true;
PI_d =(PI_r * -1)/(Math.PI / 180);
ROT -= PI_d;

PI_d = 1;
}

}

4ここな ◆noLKOKOKEo:2010/08/25(水) 23:39:56
当たり判定について調べてみた。
やはり複数の四角形を上手において判定する方式を取ったほうがよさそうだ。

まず画面中においてある四角形の数を認識
次にhitTestで自分が0〜xxまでの四角形に触れていないかを調べる

で、弾く方向は

1.自分にも複数の矩形をもたせて方向を与える
2.座標指定方式で複数の矩形を定義しておく

このどっちかだろうなあ。。。

5ここな@携帯:2010/08/26(木) 07:40:31
カーブ時に遠心力考慮したのは良いけど進行方向にも一定時間減速かかること考慮してなかった罠 。

別関数に時間ぶちこんで無くなるまで減速しておくかな…

6ここな ◆noLKOKOKEo:2010/08/27(金) 00:01:10
とりあえず遠心力を追加。

mX = 0;mY = 0;
mpX = 0;

MOV = 0;ROT = 1;

HIT = false;
PI = Math.PI;
PI_d = 0;

keyL = 0;keyR = 0;keyBack = 0;

onEnterFrame = function(){

keisan();
dousa();

if(MOV < 8){MOV += 0.08;}

if(keyBack & Key.isDown(40)){

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

}

if(keyL & Key.isDown(37)){
ROT -= 4;
MOV -= 0.11;
mpX -= 0.05;
}
else if(keyL & !Key.isDown(37)){
mpX = 0;
}

if(keyR & Key.isDown(39)){
ROT += 4;
MOV -= 0.11;
mpX += 0.05;
}
else if(keyR & !Key.isDown(39)){
mpX = 0;
}

// atari();

trace(MOV+"/"+mpX+":"+mY+" "+ROT+"/"+PI_d+" "+HIT);
HIT = false;
PI_d = 1;

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

};

function keisan(){

PI_r = ROT * (Math.PI / 180);

mX = Math.floor(MOV * Math.sin(PI_r) * 10) / 10;
mY = Math.floor(MOV * Math.cos(PI_r) * 10) / 10;

}

function dousa(){

MOV = Math.floor(MOV*100)/100;

_root.test._x += mX + mpX;
_root.test._y -= mY;
_root.test._rotation = ROT;

}

function atari(){

if(_root.hani.hitTest(_root.test._x,_root.test._y,true)){
HIT = true;
PI_d =(PI_r - Math.PI*1.7)/(Math.PI / 180);
ROT -= PI_d;

}

}

明日はガッツリ仕事だろうなあ( ゚Д゚)

7ここな@携帯:2010/08/27(金) 07:36:58
次はカーブに影響与えずに加速度を調整しないとなあ…三角関数の計算してるところに数値噛ませるかなあ。かなり減衰するけど。。

8ここな ◆noLKOKOKEo:2010/08/29(日) 18:26:35
/*---------------------
初期設定
----------------------*/
mX = 0;mY = 0;
mpX = 0;
mbX = 0;mbY = 0;

MOV = 0;ROT = 1;BTT = 0;

HIT = false;
PI = Math.PI;

keyL = 0;keyR = 0;keyBack = 0;

/*--------------------
毎フレーム処理
----------------------*/
ブーストと簡易の当たり判定。
計算量をどう減らすかが課題。

onEnterFrame = function(){

//計算は外部でやってる
keisan();
dousa();
atari();

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

//桁整理
BTT = Math.floor(BTT * 100) / 100;
mpX = Math.floor(mpX * 100) / 100;

//入力受付
if(keyBTT & !Key.isDown(38)){

if(BTT == 0){BTT += 10;}

}

if(MOV < 8){MOV += 0.08;}

if(keyBack & Key.isDown(40)){

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

}

if(keyL & Key.isDown(37)){
ROT -= 4;
MOV -= 0.11;
mpX -= 0.05;
}
else if(keyL & !Key.isDown(37)){
mpX = 0;
}

if(keyR & Key.isDown(39)){
ROT += 4;
MOV -= 0.11;
mpX += 0.05;
}
else if(keyR & !Key.isDown(39)){
mpX = 0;
}

trace("BS:"+BTT+" "+MOV+"/"+mpX+":"+mY+" "+ROT);

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

};



if(_root.st_test.hit3.hitTest(_root.test)){
_root.test._x -= _root.st_test.hit3._width + 10;
MOV = 2;
}
}

続きはつぎへ

9ここな ◆noLKOKOKEo:2010/08/29(日) 18:27:10
さっきの続き

function keisan(){

PI_r = ROT * (Math.PI / 180);

mX = Math.floor(MOV * Math.sin(PI_r) * 10) / 10;
mY = Math.floor(MOV * Math.cos(PI_r) * 10) / 10;

mbX = Math.floor(BTT * Math.sin(PI_r) * 10) / 10;
mbY = Math.floor(BTT * Math.cos(PI_r) * 10) / 10;

}

function dousa(){

MOV = Math.floor(MOV*100)/100;

_root.test._x += mX + mbX +mpX;
_root.test._y -= mY + mbY;
_root.test._rotation = ROT;
}

function atari(){

if(_root.st_test.hit0.hitTest(_root.test)){
_root.test._y += _root.st_test.hit0._height + 10;
}

if(_root.st_test.hit1.hitTest(_root.test)){
_root.test._x += _root.st_test.hit1._width + 10;
MOV = 2;
}

if(_root.st_test.hit2.hitTest(_root.test)){
_root.test._y -= _root.st_test.hit2._height + 10;
MOV = 2;
}

10ここな ◆noLKOKOKEo:2010/08/29(日) 18:27:52
横滑りの処理がよーく考えたら宜しくなくてチョットゲンナリ。
これも三角関数で計算するときに減算しないといけないんだけど
向きが常に変わる1方向に対して行うとか考えると。。。

メド...('A`)

11ここな ◆noLKOKOKEo:2010/08/29(日) 23:21:36
修正すた。

/*---------------------
初期設定
----------------------*/
mX = 0;mY = 0;
mbX = 0;mbY = 0;

MOV = 0;BTT = 0;
ROT = 1;ROT_Df = 0;

HIT = false;
PI = Math.PI;PI_r = 0;PI_rD = 0;

keyL = 0;keyR = 0;keyBack = 0;

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

//計算は外部でやってる
keisan();
dousa();
atari();

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

//桁整理
BTT = Math.floor(BTT * 100) / 100;
ROT_Df = Math.floor(ROT_Df * 100) / 100;
ROT = Math.floor(ROT * 100) / 100;

//入力受付
if(keyBTT & !Key.isDown(38)){

if(BTT == 0){BTT += 10;}

}

if(MOV < 8){MOV += 0.08;}

if(keyBack & Key.isDown(40)){

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

}

if(keyL & Key.isDown(37)){
ROT -= 5;
MOV -= 0.1;
ROT_Df += 0.5;
}
else if(keyL & !Key.isDown(37)){
ROT_Df = 0;
}

if(keyR & Key.isDown(39)){
ROT += 5;
MOV -= 0.1;
ROT_Df += 0.5;
}
else if(keyR & !Key.isDown(39)){
ROT_Df = 0;
}

trace("BS:"+BTT+" "+MOV+"/"+ROT+" "+ROT_Df+"/"+PI_r);

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

};

12ここな ◆noLKOKOKEo:2010/08/29(日) 23:22:09
さっきの続き。


/*----------------------
計算処理
------------------------*/
function keisan(){

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) / 10;
mbY = Math.floor(BTT * Math.cos(PI_r) * 10) / 10;

}

/*----------------------
移動値の確定
------------------------*/
function dousa(){

MOV = Math.floor(MOV*100)/100;

_root.test._x += mX + mbX;
_root.test._y -= mY + mbY;
_root.test._rotation = ROT;
}

/*----------------------
当たり判定の計算
------------------------*/
function atari(){

if(_root.st_test.hit0.hitTest(_root.test.my_hit)){
_root.test._y += _root.st_test.hit0._height + 5;
MOV = 2;
}

if(_root.st_test.hit1.hitTest(_root.test.my_hit)){
_root.test._x += _root.st_test.hit1._width + 5;
MOV = 2;
}

if(_root.st_test.hit2.hitTest(_root.test.my_hit)){
_root.test._y -= _root.st_test.hit2._height + 5;
MOV = 2;
}

if(_root.st_test.hit3.hitTest(_root.test.my_hit)){
_root.test._x -= _root.st_test.hit3._width + 5;
MOV = 2;
}
}

13ここな@携帯:2010/08/30(月) 08:36:20
次は描画データの持ち方とコリジョンデータの外部化かなあ…

14ここな@携帯:2010/08/31(火) 00:20:19
描画用の計算

壱.角度/360(切り上げ)

弐.角度/一枚の角度

goto(弐/壱(切り捨て))

15ここな@携帯:2010/09/01(水) 19:49:50
描画に合わせた移動をさせるには…

a.押下時に初期角度入力
b.時間で増加する値を設置
c.初期角度にbを加算

16ここな ◆noLKOKOKEo:2010/09/01(水) 23:58:35
/*---------------------
角度調整はしてみた。
でも直線走りづらいから時間制御もつけないとダメだの…(´・ω・`)

初期設定
----------------------*/
mX = 0;mY = 0;
mbX = 0;mbY = 0;

MOV = 0;BTT = 0;
ROT = 1;
DD = 0.5;ROT_Df = 0;RR = 8;ROT_Tm = RR;

HIT = false;
PI = Math.PI;PI_r = 0;PI_rD = 0;

keyL = 0;keyR = 0;keyBack = 0;

anmFR = 0;divR = 12;
r_DIV = 360/ divR;

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

//計算は外部でやってる
keisan();
dousa();
anim();
atari();

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

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

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

//桁整理
BTT = Math.floor(BTT * 100) / 100;
ROT_Df = Math.floor(ROT_Df * 100) / 100;
ROT = Math.floor(ROT * 100) / 100;

//入力受付
if(keyBTT & !Key.isDown(38)){

if(BTT == 0){BTT += 10;}

}

if(MOV < 8){MOV += 0.12;}

if(keyBack & Key.isDown(40)){

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

}

if(keyL & Key.isDown(37)){
MOV -= 0.10;
ROT_Tm -= 0.05;
ROT -= ROT_Tm;
if(ROT_Df > -30){ROT_Df -= DD;}
}
else if(keyL & !Key.isDown(37)){
ROT_Tm = RR;
}
else if(!keyL == !Key.isDown(37)){
if(ROT_Df < 0){ROT_Df += DD;}
}

if(keyR & Key.isDown(39)){
MOV -= 0.10;
ROT_Tm -= 0.05;
ROT += ROT_Tm;
if(ROT_Df < 30){ROT_Df += DD;}
}
else if(keyR & !Key.isDown(39)){
ROT_Tm = RR;
}
else if(!keyR == !Key.isDown(39)){
if(ROT_Df > 0){ROT_Df -= DD;}
}

trace("BS:"+BTT+" "+MOV+"/"+ROT+" "+ROT_Df);

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

};

17ここな ◆noLKOKOKEo:2010/09/01(水) 23:59:08
続き

/*----------------------
計算処理
------------------------*/
function keisan(){

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) / 10;
mbY = Math.floor(BTT * Math.cos(PI_r) * 10) / 10;

}

/*----------------------
移動値の確定
------------------------*/
function dousa(){

MOV = Math.floor(MOV*100)/100;

_root.test._x += mX + mbX;
_root.test._y -= mY + mbY;
_root.test._rotation = ROT;

_root.my_pic._x = _root.test._x;
_root.my_pic._y = _root.test._y;
}

/*----------------------
アニメーション用の計算
----------------------*/
function anim(){

_root.my_pic.gotoAndStop(anmFR);
anmFR = Math.floor(ROT / r_DIV)+1;

}

/*----------------------
当たり判定の計算
------------------------*/
function atari(){

if(_root.st_test.hit0.hitTest(_root.test.my_hit)){
_root.test._y += _root.st_test.hit0._height + 3;
MOV = 2;
}

if(_root.st_test.hit1.hitTest(_root.test.my_hit)){
_root.test._x += _root.st_test.hit1._width + 3;
MOV = 2;
}

if(_root.st_test.hit2.hitTest(_root.test.my_hit)){
_root.test._y -= _root.st_test.hit2._height + 3;
MOV = 2;
}

if(_root.st_test.hit3.hitTest(_root.test.my_hit)){
_root.test._x -= _root.st_test.hit3._width + 3;
MOV = 2;
}

18ここな ◆noLKOKOKEo:2010/09/08(水) 00:12:57
当たり判定の処理をデータ化

/*---------------------
初期設定
----------------------*/
mX = 0;mY = 0;
mbX = 0;mbY = 0;

MOV = 0;BTT = 0;
ROT = 1;
TT = 9.0;ROT_tm = 0;
DD = 3.0;ROT_Df = 0;
RR = 8.0;ROT_pm = RR;

PI = Math.PI;PI_r = 0;PI_rD = 0;

keyL = 0;keyR = 0;keyBack = 0;

anmFR = 0;divR = 12;
r_DIV = 360/ divR;

19ここな ◆noLKOKOKEo:2010/09/08(水) 00:13:29
続き

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

//計算は外部でやってる
keisan();
dousa();
anim();
atari();

//数値計算ラクにする
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;}

//桁整理
BTT = Math.floor(BTT * 100) / 100;
ROT_Df = Math.floor(ROT_Df * 100) / 100;
ROT = Math.floor(ROT * 100) / 100;

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

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

//左へ曲がるとき
if(keyL & Key.isDown(37)){
MOV -= 0.10;
if(ROT_tm < TT){
ROT -= 0.3;
ROT_tm ++;
}
else{
if(ROT_pm > 4){ROT_pm -= 0.15;}
ROT -= ROT_pm;
if(ROT_Df > -30){ROT_Df -= DD;}
}
}
//ボタンを離したときの処理
else if(keyL & !Key.isDown(37)){
ROT_pm = RR;
ROT_tm = 0;
}
else if(!keyL == !Key.isDown(37)){
if(ROT_Df < 0){ROT_Df += DD;}
}

//右へ曲がるとき
if(keyR & Key.isDown(39)){
MOV -= 0.20;
if(ROT_tm < TT){
ROT += 0.3;
ROT_tm ++;
}
else{
if(ROT_pm > 4){ROT_pm -= 0.15;}
ROT += ROT_pm;
if(ROT_Df < 30){ROT_Df += DD;}
}
}
//ボタンを離したときの処理
else if(keyR & !Key.isDown(39)){
ROT_pm = RR;
ROT_tm = 0;
}
else if(!keyR == !Key.isDown(39)){
if(ROT_Df > 0){ROT_Df -= DD;}
}

trace("BS:"+BTT+" "+MOV+"/"+ROT+":"+ROT_pm+" "+STR_map.STR[STRpos_Y][STRpos_X]);

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

};

20ここな ◆noLKOKOKEo:2010/09/08(水) 00:14:06
これで最後。

/*----------------------
計算処理
------------------------*/
function keisan(){

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) / 10;
mbY = Math.floor(BTT * Math.cos(PI_r) * 10) / 10;

STRpos_X = Math.floor(_root.test._x / _root.STR_map.STR_W);
STRpos_Y = Math.floor(_root.test._y / _root.STR_map.STR_H);
}

/*----------------------
移動値の確定
------------------------*/
function dousa(){

MOV = Math.floor(MOV*100)/100;

_root.test._x += mX + mbX;
_root.test._y -= mY + mbY;
_root.test._rotation = ROT;

_root.my_pic._x = _root.test._x;
_root.my_pic._y = _root.test._y;
}

/*----------------------
アニメーション用の計算
----------------------*/
function anim(){

_root.my_pic.gotoAndStop(anmFR);
anmFR = Math.floor(ROT / r_DIV)+1;

}

/*----------------------
当たり判定の計算
------------------------*/
function atari(){

if(_root.STR_map.STR[STRpos_Y][STRpos_X] == 1){
_root.test._y += _root.STR_map.STR_H + 3;
MOV = 2;
}

if(_root.STR_map.STR[STRpos_Y][STRpos_X] == 2){
_root.test._x += _root.STR_map.STR_W + 3;
MOV = 2;
}

if(_root.STR_map.STR[STRpos_Y][STRpos_X] == 3){
_root.test._y -= _root.STR_map.STR_H + 3;
MOV = 2;
}

if(_root.STR_map.STR[STRpos_Y][STRpos_X] == 4){
_root.test._x -= _root.STR_map.STR_W + 3;
MOV = 2;
}
}

21ここな ◆noLKOKOKEo:2010/09/08(水) 00:15:26
明日からはマップ画像をはめ込んだり、データ弄ったりしつつ
マップスクロールのための仕込み。

全部の関数を組みなおしになるから結構大工事。
まあ、いつものこと。

( ゚Д゚)<ゥェ

22ここな ◆noLKOKOKEo:2010/09/13(月) 23:11:20
上手くいかNeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!


元々ホイール操作で遊ばせてなんぼの構想だしなあ。
そろそろボタン制御から抜け出して操作ホイールつくるかぁ

23ここな@携帯:2010/09/13(月) 23:48:20
あと横滑り計算用の角度も調整しないとなあ…

24ここな ◆noLKOKOKEo:2010/09/15(水) 13:05:02
本日追加分の処理

//遠近でスケール制御
_root.my_pic._yscale = 100 + SC_rf/10;
_root.my_pic._xscale = 100 + SC_rf/10;

25ここな ◆noLKOKOKEo:2010/10/12(火) 06:41:02
オーバルコースつくろうのスクリプト。
まだ仕込みの段階。
変数の判定を付け加えなくては…

/*-----------------------------------
初期設定
たぶん、この部分は別ファイル化する
-----------------------------------*/
Z = 0;
Z_MAX = 1000;

createTextField("_tx",10,10,10,50,200);

LD = new Array();
// [R-x,R-y/L-x,L-y:Crx,Cry/Clx,Cly]
// [ 0, 1/ 2, 3: 4, 5/ 6, 7]
LD[ 0] = [ 80,150,240,150,180, 80,140, 80];
LD[250] = [150,150,360,150,240, 80,200, 80];

/*-----------------------------------
ビルド部分
-----------------------------------*/
onEnterFrame = function(){
if(Z == Z_MAX){Z = 0;}
else{Z++;}
_tx.text = Z;
courseBuild();
};

/*-----------------------------------
図形描画
変数に値が入っているときだけ描画。
描画のたびに表示を消す。
-----------------------------------*/
function courseBuild(){
this.lineStyle (0,0x000000);
this.beginFill (0x0000FF,50);
this.moveTo (LD[Z][4],LD[Z][5]);
this.curveTo (LD[Z][2],LD[Z][3],320,240);
this.lineTo (0,240);
this.curveTo (LD[Z][0],LD[Z][1],LD[Z][6],LD[Z][7]);
this.endFill();
}

26ここな ◆noLKOKOKEo:2010/10/12(火) 12:49:46
骨組み完成。
このデータ作りをどーやって効率よくできるようにするかが問題か…

/*-----------------------------------
初期設定
たぶん、この部分は別ファイル化する
-----------------------------------*/
Z = 0;
Z_MAX = 1000;

createTextField("_tx",10,10,10,50,200);

LD = new Array();
// [R-x,R-y/L-x,L-y:Crx,Cry/Clx,Cly]
// [ 0, 1/ 2, 3: 4, 5/ 6, 7]
LD[ 0] = [ 80,150,240,150,180, 80,140, 80];
LD[125] = [110,150,290,150,240, 80,200, 80];
LD[250] = [150,150,360,150,240, 80,200, 80];

/*-----------------------------------
ビルド部分
-----------------------------------*/
onEnterFrame = function(){
courseBuild();
if(Z == Z_MAX){Z = 0;}
else{Z++;}
_tx.text = Z;
trace(LD[Z]);
};

/*-----------------------------------
図形描画
変数に値が入っているときだけ描画。
描画のたびに表示を消す。
-----------------------------------*/
function courseBuild(){
if(LD[Z] != undefined){
this.clear();
this.lineStyle (0,0x000000);
this.beginFill (0x0000FF,50);
this.moveTo (LD[Z][4],LD[Z][5]);
this.curveTo (LD[Z][2],LD[Z][3],320,240);
this.lineTo (0,240);
this.curveTo (LD[Z][0],LD[Z][1],LD[Z][6],LD[Z][7]);
this.endFill();
}
}

27ここな ◆noLKOKOKEo:2010/10/12(火) 23:10:05
結局タイムライン制御におちついたでござる。
あとはタイムライン側の動かし方だな…研究せんと( ゚Д゚)

/*-----------------------------------
初期設定
たぶん、この部分は別ファイル化する
-----------------------------------*/
Z = 0;
Z_MAX = 1000;

/*-----------------------------------
ビルド部分
-----------------------------------*/
function INIT_st(){
createTextField("_tx",10,10,10,50,200);
}

INIT_st();

onEnterFrame = function(){
courseBuild();
_tx.text = Z;
// if(Z == Z_MAX){Z = 0;}else{Z++;}
};

/*-----------------------------------
図形描画
変数に値が入っているときだけ描画。
描画のたびに表示を消す。
-----------------------------------*/
function courseBuild(){
this.clear();
this.lineStyle (0,0x000000);
this.beginFill (0x0000FF,50);
this.moveTo (curse_MA.upper_L._x,curse_MA.upper_L._y);
this.curveTo (curse_MA.cu_L._x,curse_MA.cu_L._y,curse_MA.lower_L._x,curse_MA.lower_L._y);
this.lineTo (curse_MA.lower_R._x,curse_MA.lower_R._y);
this.curveTo (curse_MA.cu_R._x,curse_MA.cu_R._y,curse_MA.upper_R._x,curse_MA.upper_R._y);
this.endFill();
}

今はカーブ制御だけど、これスプライト制御しないとダメポ??

28ここな ◆noLKOKOKEo:2010/10/14(木) 00:10:06
ほぼ、最終形。
あとはアニメーション部分をどうするかだなあ。

/*-----------------------------------
初期設定
たぶん、この部分は別ファイル化する
-----------------------------------*/
Z = 0;
Z_MAX = 150;

/*-----------------------------------
ビルド部分
-----------------------------------*/
function INIT_st(){
createTextField("_tx",10,10,10,50,200);
}

INIT_st();

onEnterFrame = function(){
courseBuild();
_tx.text = Z;
if(Z == Z_MAX){Z = 2;}else{Z += 0.2;}
curse_MA.gotoAndStop(Z);
};

/*-----------------------------------
図形描画
変数に値が入っているときだけ描画。
描画のたびに表示を消す。
-----------------------------------*/
function courseBuild(){
this.clear();
this.lineStyle (0,0x000000);
this.beginFill (0x0000FF,50);
this.moveTo (curse_MA.upper_L._x,curse_MA.upper_L._y);
this.curveTo (curse_MA.cu_L._x,curse_MA.cu_L._y,curse_MA.lower_L._x,curse_MA.lower_L._y);
this.lineTo (curse_MA.lower_R._x,curse_MA.lower_R._y);
this.curveTo (curse_MA.cu_R._x,curse_MA.cu_R._y,curse_MA.upper_R._x,curse_MA.upper_R._y);
this.endFill();
}

29ここな ◆noLKOKOKEo:2010/10/18(月) 13:00:23
面の塗りをアニメーションさせるスクリプトサンプル

TT = 0;

onEnterFrame = function(){
if(TT > 300){TT = 0;}
else{TT += 10;}
PIC();
trace(TT);
};

function PIC(){
GYO();
this.clear();
this.beginFill(0x000000,100);
this.beginGradientFill (
"linear",
[0xFF0000, 0xFFFFFF], // カラー
[ 100, 100], // アルファ
[ 127, 128], // 位置配分(0 〜 255)
m, // 行列
"repeat",
"linearRGB",
0.0
);
this.moveTo ( 20, 20);
this.curveTo(120,20,120,120);
this.lineTo (100,120);
this.curveTo(100,40, 20, 40);
this.endFill();
};

function GYO(){
m = {
matrixType:"box", // マトリックスの種類
x:0, // x座標
y:TT, // y座標
w:90, // 幅
h:90, // 高さ
r:60 * Math.PI / 180 // 角度
};
}

30ここな ◆noLKOKOKEo:2010/11/01(月) 06:47:30
コースをムービークリップごとに分解して表示するスクリプト
角度はフォトショの角度のままなので0〜180〜-180なので+90づつずらさないと使えない。

あとは車乗っけて試すだけだけど、以前のソースを上手く再利用できるように加工し直すのは必至なのかなあ

//コースデータ
CUR = new Array();
// [A-X,A-Y,B-X,B-Y, rot]
CUR[ 0] = [ 52,442,130,472, 52.8];
CUR[ 1] = [332, 90,378,130, 33.0];
CUR[ 2] = [398, 44,432, 94, 13.7];
CUR[ 3] = [488, 28,490, 84,- 7.6];
CUR[ 4] = [590, 38,540, 96,- 65.8];
CUR[ 5] = [624,114,550,138,- 97.1];
CUR[ 6] = [612,204,548,190,-115.6];
CUR[ 7] = [452,596,362,540,-130.3];
CUR[ 8] = [366,690,312,612,-152.5];
CUR[ 9] = [270,714,254,644,-175.6];
CUR[10] = [168,712,188,656, 160.8];
CUR[11] = [ 86,682,136,638, 134.4];
CUR[12] = [ 32,616,114,592, 117.4];
CUR[13] = [ 20,528,110,546, 92.5];
CUR[14] = [ 52,442,130,472, 72.0];

CUR_MAX = CUR.length - 1;
trace(CUR_MAX);

//修正箇所いっぱい
function draw_map(){

// _root.clear();

for(i=0;i<CUR_MAX;i++){
ii = i+1;
_root.ROtmp = createEmptyMovieClip("ROD" + i,100+i);
_root["ROD"+i].beginFill(0x0000FF,100);
_root["ROD"+i].moveTo(CUR[i][0],CUR[i][1]);
_root["ROD"+i].lineTo(CUR[i][2],CUR[i][3]);
_root["ROD"+i].lineTo(CUR[ii][2],CUR[ii][3]);
_root["ROD"+i].lineTo(CUR[ii][0],CUR[ii][1]);
_root["ROD"+i].endFill();
}

}

draw_map();
trace(_root.ROD1._width);

31ここな@携帯:2010/11/01(月) 08:00:17
車側の座標更新はヒットテスト成功時に限定して、失敗したら加速度にマイナス値入れつつ角度補正すればコースアウト対策もなんとかなるかな。

座標も一時的に保存しなきゃいけないからまた関数増えるのが難点だな…

32ここな ◆noLKOKOKEo:2010/11/01(月) 13:04:46
角度修正終了。
データ末尾の処理は何か考えないとな…

//コースデータ
CUR = new Array();
// [A-X,A-Y,B-X,B-Y, rot]
CUR[ 0] = [ 52,442,130,472,142.8];
CUR[ 1] = [332, 90,378,130,123.0];
CUR[ 2] = [398, 44,432, 94,103.7];
CUR[ 3] = [488, 28,490, 84, 82.4];
CUR[ 4] = [590, 38,540, 96, 24.2];
CUR[ 5] = [624,114,550,138,352.9];
CUR[ 6] = [612,204,548,190,334.4];
CUR[ 7] = [452,596,362,540,319.7];
CUR[ 8] = [366,690,312,612,297.5];
CUR[ 9] = [270,714,254,644,274.4];
CUR[10] = [168,712,188,656,250.8];
CUR[11] = [ 86,682,136,638,224.4];
CUR[12] = [ 32,616,114,592,207.4];
CUR[13] = [ 20,528,110,546,182.5];
CUR[14] = [ 52,442,130,472,162.0];
CUR[15] = [ 52,442,130,472, null];

CUR_MAX = CUR.length -1;

trace("CUR_AMX:" + CUR_MAX);

//修正箇所いっぱい
function draw_map(){

// _root.clear();

for(i=0;i<CUR_MAX;i++){

trace(CUR[i][4]);

ii = i+1;
_root.ROtmp = createEmptyMovieClip("ROD" + i,100+i);
_root["ROD"+i].beginFill(0x0000FF,100);
_root["ROD"+i].moveTo(CUR[i][0],CUR[i][1]);
_root["ROD"+i].lineTo(CUR[i][2],CUR[i][3]);
_root["ROD"+i].lineTo(CUR[ii][2],CUR[ii][3]);
_root["ROD"+i].lineTo(CUR[ii][0],CUR[ii][1]);
_root["ROD"+i].endFill();
}

}

draw_map();
trace("_root.ROD1._width:" + _root.ROD1._width);

33ここな ◆noLKOKOKEo:2010/11/01(月) 13:23:01
そうか、最後の座標のところは適当な値入れておいて
カーブ諸共ムービークリップ消しちまえばいいのか。

34ここな ◆noLKOKOKEo:2010/11/04(木) 09:11:47
これ、このコリジョンみて角度変える部分を
操作内容や重力判定に切り替えたらアクションゲームでも応用できそうだな…ゴクリ

35ここな ◆noLKOKOKEo:2010/11/07(日) 23:14:51
コース当て込んでみたけど余計につまらなくなってたの巻き
コース、車をもっと寝かさないとなあ。。。

画面比率を考えたときに傾斜が強いと入りきらないっすわ。
あとは画像が縦長のときのことも一緒に検証しておかないとなー


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板