2014年01月17日
追尾処理(ホーミング)をする物をたくさん設置すればもやもやしだします。
スクリーンショット
残像を残すようにしたらもの凄くキモ・・・ち悪くなった
残像処理の一本勝ち
ソースコード(HSP) '14/1/18更新:説明の微修正
で、説明ですが大体はソースコードに書いたのでそちらを見て下さい。
atanの使い方
上のコードではatanを使っています。
ひとまず、プログラミングやゲームでのatanの使い方について書いておきます。
もやもやするやつの使い方
演出にとってもいい感じだと思います。
MAXを1000にするともっといい感じです。
四角形にもやもやしたい時は、パーティクル個別に目的地を移動させればOK
おしまいです。
裏話
・スクリーンショットが静止画だとわけわからんので残像処理を使ったんですが、どうやらクリーンヒットしたようです。
・これ書くのに三時間かかった・・・半分以上はソースコード及び調べ物及び記事関係無いですが
・洞窟物語でよく見かけます、これ
ドクターの赤い結晶モード、きまぐれな星、プー・ブラックの周りのやつなど
で、前に気になって作ってみたものを今回投下しました。
・うーん、これ速度制限の処理が無駄な気がする……いちいち直行座標を極座標にして戻してるからね
自然では、速度制限ではなく空気抵抗という掛け算で自然に減速すると思うんですが、ゲームだとそればイマイチ
スクリーンショット
残像を残すようにしたらもの凄くキモ・・・ち悪くなった
残像処理の一本勝ち
ソースコード(HSP) '14/1/18更新:説明の微修正
//もやもやするパーティクル(黄色いやつ) @Key('' //描画関数 #define ctype draw(%1,%2,%3) circle (%2) - (%1), (%3) - (%1), (%2) + (%1), (%3) + (%1) #const MAX 100 //パーティクルの数 //パーティクルの変数 ddim p_x,MAX:ddim p_y,MAX //座標 ddim p_vx,MAX:ddim p_vy,MAX //速度 ddim p_vAccel,MAX //加速性能 //目的地の座標 x=0.0:y=0.0 //計算用 ang=0.0:spd=0.0 repeat MAX //座標ををランダムに決定する p_x(cnt)=double(rnd(640)) p_y(cnt)=double(rnd(480)) //加速性能(引かれやすさ=質量)をランダムに設定 p_vAccel(cnt)=double(rnd(200))/1000.0+0.10 //0.100~0.500の範囲ランダム loop *main //目的地の座標をマウスの位置に指定 x=double(mousex):y=double(mousey) //パーティクルを移動する処理 repeat MAX //目的地までの角度を求め、その方向の速度をvx,vyに加算する //つまり目的地に落ちていく引力の処理 ang=atan(y-p_y(cnt),x-p_x(cnt)) p_vx(cnt)+=cos(ang)*p_vAccel(cnt) p_vy(cnt)+=sin(ang)*p_vAccel(cnt) //vx,vyを角度と速度に変換し、速度を一定値に制限し、またvx,vyに変換する //つまり一定速度以上を禁止する:ここは無くても問題無い ang=atan(p_vy(cnt),p_vx(cnt)) : spd=sqrt(p_vx(cnt)*p_vx(cnt)+p_vy(cnt)*p_vy(cnt)) //spdの出し方はhspmathのdistance2と同じ spd=limitf(spd,0.0,5.0) //5.0が制限速度 p_vx(cnt)=cos(ang)*spd p_vy(cnt)=sin(ang)*spd //座標に速度を加算する //つまり移動する p_x(cnt)+=p_vx(cnt) : p_y(cnt)+=p_vy(cnt) loop //描画する redraw 0 //color 255,255,255 : boxf //クリア gmode 5,,,255 : color 10,10,10 grect 320,240,0,640,480 : gmode 0 //残像を残すクリア color 0,0,255 : draw(5,x,y) //目的地 color 255,128 repeat MAX draw(7,p_x(cnt),p_y(cnt)) //パーティクル loop redraw 1 //メインループ処理 await 20 goto *main
で、説明ですが大体はソースコードに書いたのでそちらを見て下さい。
atanの使い方
上のコードではatanを使っています。
ひとまず、プログラミングやゲームでのatanの使い方について書いておきます。
- 0,0からy,xまでの角度が求められる
- 上は言語によってはatan2になってる(値が2つ指定できる関数がatan2)
- 本来のatanは、数学的にはどうやらタンジェントの逆関(ry)詳しく見たい人はWi(ry
- 本来のatanを使うと0除算やら90°の範囲しか出てこないやらと問題なので、素直にatan2を使うのがいい
- x,yをそれぞれ負にすると正反対の角度になる
- ゲームでは、弾を目的の方向に発射するのとかに使える!
- 本場のホーミングには、もう一工夫入ります。ここ(HSP開発Wiki)を参考にして下さい。
もやもやするやつの使い方
演出にとってもいい感じだと思います。
MAXを1000にするともっといい感じです。
四角形にもやもやしたい時は、パーティクル個別に目的地を移動させればOK
おしまいです。
裏話
・スクリーンショットが静止画だとわけわからんので残像処理を使ったんですが、どうやらクリーンヒットしたようです。
・これ書くのに三時間かかった・・・半分以上はソースコード及び調べ物及び記事関係無いですが
・洞窟物語でよく見かけます、これ
ドクターの赤い結晶モード、きまぐれな星、プー・ブラックの周りのやつなど
で、前に気になって作ってみたものを今回投下しました。
・うーん、これ速度制限の処理が無駄な気がする……いちいち直行座標を極座標にして戻してるからね
自然では、速度制限ではなく空気抵抗という掛け算で自然に減速すると思うんですが、ゲームだとそればイマイチ
2014年01月11日
概要
自分が少し前に作ったゲーム、I wanna be the missionに組み込まれている技術を書いていきます。
何故かマリオのようなアクションゲームを作る作り方の文章が少ない・・・と思ったので書くことに決めました。
メニュー
基本技術の説明(更新中止中。近況をどうぞ):
公開したマップエディタソフト:
続きを読む
自分が少し前に作ったゲーム、I wanna be the missionに組み込まれている技術を書いていきます。
何故かマリオのようなアクションゲームを作る作り方の文章が少ない・・・と思ったので書くことに決めました。
メニュー
基本技術の説明(更新中止中。近況をどうぞ):
- プレイヤーキャラの基本
- プレイヤーキャラとマップの基本
- プレイヤーキャラとマップの基本:詳細説明
- プレイヤーの物理挙動(実際のコード)
- プレイヤーの物理挙動2(ジャンプの高さをボタンで調節する、など)
- プレイヤーと情報の当たり判定
- プレイヤーの斜め床
- プレイヤーの動く床&斜め床(予定)
- 下から上がれる床、リフト、回転床(予定)
公開したマップエディタソフト:
続きを読む
2014年01月11日
2Dアクションゲームの作り方です
→2Dアクションゲームの作り方
この記事は、プレイヤーキャラの基本の続きです。
マップとの判定をとり、2Dアクションゲームっぽくするためのチュートリアル
1:マップについて
これは今裏でこっそり作っているやつの画面です
簡単に説明しますと、緑色のがプレイヤーです。
で、周りにある線は上下左右の判定の位置です。
赤色の線はその向きが進行可能(=空気)だと示し、黄色は進行不可能(=地面)と示しています。
要するにこれが「マップ」だって言いたいだけです
次に内部のデータを可視化したものがこちら
黒い文字はタイル番号です。
0の所は空気、それ以外はブロックになっています。
各番号はそれぞれある画像を表示するようになっていて、例えば
タイル番号=6
の場合
芝生のブロック()が表示されます。
マップを扱うゲームでは、大抵このような感じをとっていると思います。
2:プレイヤー側のマップ判定
四隅を各2つ判定をとればおしまい
具体的には、こう
各方向の●(の中の小さい■のドット)の位置の座標が通れるか、通れないか判定し、同じ方向のやつとOR演算
それで上下左右が通れるか、通れないかが分かります。
次
これが重要なんですが、「次フレームの座標を仮計算した座標での」●の判定を取ります。
こうするとすべてが上手く行くんですが、説明しにくいので省略。
次
上下左右にブロックがあるとわかった時、その方向の速度を0にします。
例えば下がブロックなら、
はい、これで2Dアクションゲームの基板は完成です。お疲れ様でした。
これ以外で必要な処理は、
3:実際のコードでは
マップを、2Dアクションゲームのマップにするには、
指定座標が通れるか判定する関数
これが必要です。2で説明した事がこれで可能になります。例えば、C++の場合、
まぁ、実際は負の割り算や2次元配列の範囲外や画面外タイルの処理が絡まって
これさえあれば次回につながります。
というわけでおわり
→2Dアクションゲームの作り方
この記事は、プレイヤーキャラの基本の続きです。
マップとの判定をとり、2Dアクションゲームっぽくするためのチュートリアル
1:マップについて
これは今裏でこっそり作っているやつの画面です
簡単に説明しますと、緑色のがプレイヤーです。
で、周りにある線は上下左右の判定の位置です。
赤色の線はその向きが進行可能(=空気)だと示し、黄色は進行不可能(=地面)と示しています。
要するにこれが「マップ」だって言いたいだけです
次に内部のデータを可視化したものがこちら
黒い文字はタイル番号です。
0の所は空気、それ以外はブロックになっています。
各番号はそれぞれある画像を表示するようになっていて、例えば
タイル番号=6
の場合
芝生のブロック()が表示されます。
マップを扱うゲームでは、大抵このような感じをとっていると思います。
2:プレイヤー側のマップ判定
四隅を各2つ判定をとればおしまい
具体的には、こう
各方向の●(の中の小さい■のドット)の位置の座標が通れるか、通れないか判定し、同じ方向のやつとOR演算
それで上下左右が通れるか、通れないかが分かります。
次
これが重要なんですが、「次フレームの座標を仮計算した座標での」●の判定を取ります。
こうするとすべてが上手く行くんですが、説明しにくいので省略。
次
上下左右にブロックがあるとわかった時、その方向の速度を0にします。
例えば下がブロックなら、
if(vy>0)vy=0;
のように上方向の速度は残します。はい、これで2Dアクションゲームの基板は完成です。お疲れ様でした。
これ以外で必要な処理は、
- ブロックとぶつかった時に座標をブロックの縁に沿うように移動する(スナップ)
- 斜め方向の判定も取る
がありますが、面倒なので省略。各自考えるか次の記事のソースコードを見て下さい。
3:実際のコードでは
マップを、2Dアクションゲームのマップにするには、
指定座標が通れるか判定する関数
これが必要です。2で説明した事がこれで可能になります。例えば、C++の場合、
//bufはマップの2次元配列 TileW、TileHはタイルの一辺の縦横サイズこんな感じ
bool GetA(int x, int y){ return buf[x/TileW][y/TileH] != 0; }
まぁ、実際は負の割り算や2次元配列の範囲外や画面外タイルの処理が絡まって
//タイル座標に変換こうなるんですが、 とりあえず見やすい形として前者を理解して下さい
inline int ToTileX(int x){ return (x >= 0) ? (x / TileW) : (x / TileW - 1); }
inline int ToTileY(int y){ return (y >= 0) ? (y / TileH) : (y / TileH - 1); }
//タイル座標から取得
inline int Get(int x, int y){ return isInMap(x, y) ? buf[x][y] : OutTile; }
//座標から取得
inline int GetP(int x, int y){ return Get(ToTileX(x), ToTileY(y)); }
//タイル座標を指定 マップの配列内か判定
inline bool isInMap(int x, int y){ return (x >= 0 && y >= 0 && x < width && y < height); }
//判定を取得
bool GetA(float x, float y){ return GetP((int)x, (int)y) != 0; }
bool GetA(int x, int y){ return GetP(x, y) != 0; }
これさえあれば次回につながります。
というわけでおわり
2014年01月09日
サインとコサインを駆使すると綺麗な物が作れます
これはその一例です
A:
一定速度でまわる半径30の点を描きます
残像が見えるようにしてるので、円に見えます
cos、sinとは角度を入れるとウィンドウの左上から距離1&その角度にあたる座標を計算します。
x=cos(ang) : y=sin(ang) だけだと、半径1で中心点は0,0(ウィンドウの左上)の円になります。
なおangはよく使う0~360の角度ではなく0~2πの角度です。ラジアンといいます。
B:
緑の線は先ほどの黄色い円と同じです
説明しにくいんですが、黄色い線は緑の線を中心とした新たな一定速度で回る半径50の点を描いています
残像が綺麗です
半径、回転速度、回転向きを変えたり、
三次、四次と変数を増やしてけばその分複雑になっていきます。
自作物
昔Tonyuというゲーム言語で三次のこんな感じのものをカスタムして見るツールを作ってたので、ついでに置いて行きます。
ダウンロード(zip)
いやぁ・・・昔は地味にすごいものをいくつか作っていたなぁ・・・
使い方ですが、エンターで現在のやつをセーブします
あとはカーソルキーで左上を操作して、スピログラフの詳細を変更して遊びます
ただ綺麗です。数学を盾にとればいくらでも作れ遊べますね!
専門用語は詳しくないのでスピログラフって言ってます。
Wikipediaのスピログラフによると、どうやら「曲線による幾何学模様」と言うらしいです。
ここらへん発掘のやりがいがありますね
これはその一例です
A:
一定速度でまわる半径30の点を描きます
残像が見えるようにしてるので、円に見えます
ang = 0.0簡単に説明すると、
*main
/*計算*/
//角度を適当な数増やす(ラジアン角)
ang+=0.05
//円のx,yを計算
x = cos(ang) * 30 + 200.0
y = sin(ang) * 30 + 200.0
/*描画*/
gmode 5,,,255 : color 1,1,1
grect 320,240,0,640,480 //残像が見えるように加工
color 255,200,15
circle x-2.0,y-2.0,x+2.0,y+2.0,1 //x,yに円
await 20
goto *main
x = cos(ang) * 30 + 200.0の部分であの黄色い所の先端の座標を計算し、後で表示します
y = sin(ang) * 30 + 200.0
cos、sinとは角度を入れるとウィンドウの左上から距離1&その角度にあたる座標を計算します。
x=cos(ang) : y=sin(ang) だけだと、半径1で中心点は0,0(ウィンドウの左上)の円になります。
なおangはよく使う0~360の角度ではなく0~2πの角度です。ラジアンといいます。
B:
緑の線は先ほどの黄色い円と同じです
説明しにくいんですが、黄色い線は緑の線を中心とした新たな一定速度で回る半径50の点を描いています
残像が綺麗です
ang=0.0 : ang1=0.0数学的に言うと、変数が二個絡まってるので二次、と言えるんでしょうかね?
*main
/*計算*/
//x1,y1を計算
ang1+=0.1
x1 = cos(ang1) * 30 + 200.0
y1 = sin(ang1) * 30 + 200.0
//x1,y1を中心点にx,yを計算
ang+=0.025
x = cos(ang) * 50 + x1
y = sin(ang) * 50 + y1
/*描画*/
gmode 5,,,255 : color 1,1,1
grect 320,240,0,640,480 //残像が見えるように加工
color 255,200,15
circle x-2.0,y-2.0,x+2.0,y+2.0,1 //x,yに円
color 34,177,74
circle x1-2.0,y1-2.0,x1+2.0,y1+2.0,1 //x1,y1に緑円
color 200,200,200
line x,y,x1,y1
await 20
goto *main
半径、回転速度、回転向きを変えたり、
三次、四次と変数を増やしてけばその分複雑になっていきます。
自作物
昔Tonyuというゲーム言語で三次のこんな感じのものをカスタムして見るツールを作ってたので、ついでに置いて行きます。
ダウンロード(zip)
いやぁ・・・昔は地味にすごいものをいくつか作っていたなぁ・・・
使い方ですが、エンターで現在のやつをセーブします
あとはカーソルキーで左上を操作して、スピログラフの詳細を変更して遊びます
ただ綺麗です。数学を盾にとればいくらでも作れ遊べますね!
専門用語は詳しくないのでスピログラフって言ってます。
Wikipediaのスピログラフによると、どうやら「曲線による幾何学模様」と言うらしいです。
ここらへん発掘のやりがいがありますね
2014年01月05日
2Dアクションゲームの作り方です
→2Dアクションゲームの作り方
プレイヤーの物理挙動
物理挙動といってもエセ物理演算です。
ここで挙げる方法はあくまで綺麗な形なので、実際に使う時は操作性に個性を発揮して下さい。
アイワナとか、Lamulanaとか。
基本的に他の記事とは別です。
説明
座標と速度を作って、毎フレーム座標に速度を加算することで物理演算っぽいのを行う
その加算する前に、仮に加算しておいた座標でブロックとの当たり判定をとる。上下左右。
当たり判定がヒットする方向の速度をゼロにすればブロックに衝突して停止しているように見せられる。
ただそれだけだと衝突してもうまく見えないので、衝突した場合ブロックの縁に座標を矯正する。
内訳
プレイヤーに必要な変数
毎フレーム、使用したあとに0にリセットします。
また重力や摩擦も演算しません。
そうすることで、一定速度で移動することができます。
その速度を使用する時には、vx+vvx、vy+vvyとすればOK
マップの方に必要な命令(関数)
毎フレームループの中の処理
順を追うとこうなる。
オブジェクトやマップ全てを一気に描画して下さい。
実際に書くとこうなる。
※LinkMapは上にある「マップの方」のクラスのポインタです。よくわかんなかったら無視してまったく問題ないです。
※Key[KEY_INPUT_***] は***のキーが押されてる時1が出てくる配列です。Dxライブラリにあります。他の言語の場合、そこをキー判定に置き換えてください。
ちなみに、って言うほどでもないんですがこれは洗練させた形です。
やはり実際に動作する物がないと何なのでそのうちそういう物を作ります。
終わり
がーーっと書きました。読むの面倒だと思いますが我慢して下さい。
注意点を述べます。
上のコードでは、
→2Dアクションゲームの作り方
プレイヤーの物理挙動
物理挙動といってもエセ物理演算です。
ここで挙げる方法はあくまで綺麗な形なので、実際に使う時は操作性に個性を発揮して下さい。
アイワナとか、Lamulanaとか。
基本的に他の記事とは別です。
説明
座標と速度を作って、毎フレーム座標に速度を加算することで物理演算っぽいのを行う
その加算する前に、仮に加算しておいた座標でブロックとの当たり判定をとる。上下左右。
当たり判定がヒットする方向の速度をゼロにすればブロックに衝突して停止しているように見せられる。
ただそれだけだと衝突してもうまく見えないので、衝突した場合ブロックの縁に座標を矯正する。
内訳
プレイヤーに必要な変数
x X座標。数学の座標ではなく、右下に伸びるウィンドウ座標。※vvx、vvyについて(ゲームによっては必要ないですが、結構便利だと思うので使います)
y Y座標。〃
w 横の当たり判定幅。
h 縦の当たり判定幅。
vx 横速度
vy 縦速度
vvx 横速度 毎フレーム0にします 後述
vvy 縦速度 〃
毎フレーム、使用したあとに0にリセットします。
また重力や摩擦も演算しません。
そうすることで、一定速度で移動することができます。
その速度を使用する時には、vx+vvx、vy+vvyとすればOK
マップの方に必要な命令(関数)
- bool GetA(int x,int y)関数
boolとは0か1かの変数です。整数でも構いません。
x、yを指定してその座標がブロックなら1、空気(通行可能)なら0を出す関数です。
座標なのに注意。
x、yを指定してその座標がブロックなら1、空気(通行可能)なら0を出す関数です。
座標なのに注意。
毎フレームループの中の処理
順を追うとこうなる。
--プレイヤー処理開始--描画に関してはプレイヤー処理の後で、
キー入力から速度に加算する。
重力、摩擦を計算する。
"全ての衝突処理を行う"
|マップとの上下左右判定をとって
|判定がオンならその向きの速度を0にする。
|座標に速度を加算して終わり。
--プレイヤー処理終了--
オブジェクトやマップ全てを一気に描画して下さい。
実際に書くとこうなる。
※LinkMapは上にある「マップの方」のクラスのポインタです。よくわかんなかったら無視してまったく問題ないです。
※Key[KEY_INPUT_***] は***のキーが押されてる時1が出てくる配列です。Dxライブラリにあります。他の言語の場合、そこをキー判定に置き換えてください。
void update(){
//左右キー
if (Key[KEY_INPUT_RIGHT] ){ //右
vvx += walk;
}
else if (Key[KEY_INPUT_LEFT]) { //左
vvx -= walk;
}
if (Key[KEY_INPUT_Z])
//地上だったら
if(mD)vy = 8.5;
}
/*物理挙動計算部分*/
vy += 0.4; //重力
//マップの判定を取る
ToMap();
}
void ToMap(){
static float tempF;//計算用
//左下の判定の座標
float _x = x + (w - 1), _y = y + (h - 1);
//速度加算した後の左と上の座標
float sx = floorf(x + vx + vvx), sy = floorf(y + vy + vvy);
//速度加算した後の右と下の座標
float ex = sx + (w - 1), ey = sy + (h - 1);
//マップ縦横方向判定
mL = LinkMap->GetA(sx, y) || LinkMap->GetA(sx, _y);
mR = LinkMap->GetA(ex, y) || LinkMap->GetA(ex, _y);
mU = LinkMap->GetA(x, sy) || LinkMap->GetA(_x, sy);
mD = LinkMap->GetA(x, ey) || LinkMap->GetA(_x, ey);
//マップ斜め方向判定
if (!mL && !mU){ mL = mU = LinkMap->GetA(sx, sy); }
if (!mL && !mD){ mL = mD = LinkMap->GetA(sx, ey); }
if (!mR && !mU){ mR = mU = LinkMap->GetA(ex, sy); }
if (!mR && !mD){ mR = mD = LinkMap->GetA(ex, ey); }
//座標をブロックの縁に合わせる
if (mL == true && mR == false){
tempF = ceilf(sx / LinkMap->TileW) * LinkMap->TileW; //左
if (x > tempF)x = tempF;
}
if (mL == false && mR == true){
tempF = floorf(ex / LinkMap->TileW) * LinkMap->TileW - w; //右
if (x < tempF)x = tempF;
}
if (mU == true && mD == false){
tempF = ceilf(sy / LinkMap->TileH) * LinkMap->TileH; //上
if (y > tempF)y = tempF;
}
if (mU == false && mD == true){
tempF = floorf(ey / LinkMap->TileH) * LinkMap->TileH - h; //下
if (y < tempF)y = tempF;
}
//判定による加速停止処理
if (mL){ if (vx<0 )vx = 0; if (vvx<0)vvx = 0; }
if (mR){ if (vx>0)vx = 0; if (vvx>0)vvx = 0; }
if (mU){ if (vy<0 )vy = 0; if (vvy<0)vvy = 0; }
if (mD){ if (vy>0)vy = 0; if (vvy>0)vvy = 0; }
//速度加算
x += vx; x += vvx; y += vy; y += vvy;
//常に0になる速度
vvx = 0; vvy = 0;
}
//このまま使うならupdate()の上にToMap()をおいて下さい
ちなみに、って言うほどでもないんですがこれは洗練させた形です。
やはり実際に動作する物がないと何なのでそのうちそういう物を作ります。
終わり
がーーっと書きました。読むの面倒だと思いますが我慢して下さい。
注意点を述べます。
上のコードでは、
- 速度がw、hより大きい→その速度の場合「座標をブロックの縁に合わせる」処理が動かない
- 速度がマップのタイルサイズより大きい→上と同じ
- タイルサイズがプレイヤーのサイズより小さい→プレイヤーの判定の端しかとってないので、真ん中らへんがすり抜ける
こうなります。
下2つに関しては、mUmDmLmRを計算する所の判定をマップのタイルサイズよりはみ出すぶんだけ増やせばおkです。
そのうち1つめは、そうするのではなく速度をマップのタイルサイズより小さく常に制限するのをおすすめします。
下2つに関しては、mUmDmLmRを計算する所の判定をマップのタイルサイズよりはみ出すぶんだけ増やせばおkです。
そのうち1つめは、そうするのではなく速度をマップのタイルサイズより小さく常に制限するのをおすすめします。
一番上はよくわかってません・・・あれ?
2014年01月01日
横スクロール2Dアクションゲームのソースコード
自分の考えを察するに恐らく自分の作ったI wanna be the missionに手を加える事はなさそうなのでここで一つ陽の目を見させて終わりにします。
煮るなり焼くなり好きにどうぞ。(NYSLライセンス)
ダウンロード(zip)
詳細説明
・言語はHSPです。
・SYSTEM.hspがソース本体。
・他のファイルは画像やプラグインやエディタ、そのソースに説明書です。
・もちろん見せると思って書いていたソースじゃないので見る場合はそれなりの覚悟を持ってください。
・同封してある画像や音楽やプラグインの取り扱いには気をつけてください。こちらは責任を持ちません。
・ソースコードで使っているマップアクションゲームの方法は自分の中で古い方です。新しい方は作り方の方で説明する予定です。
・少し中身の説明
・現在のSYSTEM.hspでは、*jikiDでのGreenの1判定の取得を切ってます。
恐らく重かったからそのうち別の処理にしようとしてたんだろうと思いますが、戻したいときは、
861行目の「;スイッチ 主にスプライト用」と書いてある所のコメントアウトを外して下さい。
そのままだと↑↓矢印スプライトの重力変更が無効になってます。
・一般的にはオブジェクトと言えるものをスプライトと呼んでます。
自分の考えを察するに恐らく自分の作ったI wanna be the missionに手を加える事はなさそうなのでここで一つ陽の目を見させて終わりにします。
煮るなり焼くなり好きにどうぞ。(NYSLライセンス)
ダウンロード(zip)
詳細説明
・言語はHSPです。
・SYSTEM.hspがソース本体。
・他のファイルは画像やプラグインやエディタ、そのソースに説明書です。
・もちろん見せると思って書いていたソースじゃないので見る場合はそれなりの覚悟を持ってください。
・同封してある画像や音楽やプラグインの取り扱いには気をつけてください。こちらは責任を持ちません。
・ソースコードで使っているマップアクションゲームの方法は自分の中で古い方です。新しい方は作り方の方で説明する予定です。
・少し中身の説明
・現在のSYSTEM.hspでは、*jikiDでのGreenの1判定の取得を切ってます。
恐らく重かったからそのうち別の処理にしようとしてたんだろうと思いますが、戻したいときは、
861行目の「;スイッチ 主にスプライト用」と書いてある所のコメントアウトを外して下さい。
そのままだと↑↓矢印スプライトの重力変更が無効になってます。
・一般的にはオブジェクトと言えるものをスプライトと呼んでます。