投稿記事

2019年 11月の記事 (10)

Master.typeX 2019/11/27 17:38

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Master.typeX 2019/11/23 22:15

CF2.5講座:第六回「Iniで保存と読み込みをしてみよう!」

どうも、Master.typeXです。
今回は結構難儀しました。
だって私もいまいちわかってないのに使ってるのよコレ。

と、言うことで
CF2.5講座必修項目その2
Iniオブジェクトの紹介を始めますぞー!

今回のファイル

CF25_kouza_v600.zip (126.65kB)

ダウンロード

第六回:「Iniオブジェクトによる保存と読み込み」

Iniはゲームデータの保存を行う
超絶重要オブジェクトです。

基本的な使い方を教えることはできるが
某氏に大型ディスプレイでぶん殴られることを覚悟して
今回解説していこうかと思ってます。
(実は某氏に最近フォローされた。)

使う前の儀式

まずオブジェクトを置いたらコレのチェックを外す。

忘れてしまうと
\C/ユーザー/ユーザー名/AppData/Roaming/MMFApplications
の中にiniファイルが作成されてしまう。
面倒なのがAppDataの場所が隠しファイルだということ。
なんでデフォでチェック入れてあるし・・・

基本的な使い方
基本的にはアクションで
「ファイルを指定」し「グループを指定」のあと「項目を指定」する。
保存する時はIniのアクションで数式エディタで指定した
数値、または文字列を代入すると保存できる。
読み込みはオブジェクトのアクションで数値、または文字列を
数式エディタでIniオブジェクトの「値(文字列)を取得」でIniの値を読み込む。

うん、あれだ
自分で書いておいて絶対伝わらんと思ってる。

でも実際使い方はコレなのでしょうがない・・・


ファイルの指定方法
ファイルの指定の方法は数式エディタで行う。
今回の講座ではアプリケーションのパス名を取得している。

"Apppath$" は数式エディタの
「特別」→「ファイル名」→「アプリケーションパス名」
から取得することができる。
コレを行うことで、文字通り自動的に
アプリケーションの位置までのパスを取得してくれる。

"save\save_1.ini"のうちの「save_1.ini」が
拡張子iniのファイルとなる。
その手前の「save」はフォルダ名で「¥」は
プログラム的にバックスラッシュに置き換えられるので実質的には
「saveフォルダのsave_1.iniを参照する」と、言う意味合いになる。

「.¥」の相対パスというのもあるけど
教えてもらっておいてなんだが
ぶっちゃけ理屈がいまだにわかってない。
でも、相対パスも"Apppath$"と同じような使い方ができる。

そして一番忘れちゃいけないのが「save_1.ini」の「.ini」をちゃんと書くこと。
コレを忘れてしまうと読み込み不可のファイルになってしまう。

・・・それで何度うっかり忘れて大変な目にあったか・・・

講座用MFAでは簡単な使い方を書いているので
あとはそちらを参照してくれぇ・・・


次回講座はちょっと未定です。
許せ!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Master.typeX 2019/11/19 20:45

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Master.typeX 2019/11/11 21:02

CF2.5講座:第五回「高速ループを把握せよ!」

どうも、Master.typeXです。
ココ数日疲れて倒れてたり頭痛が痛かったりして
なかなかパソ子を起動させる気力が若干失せておりました。

あっふん。

今回の講座はCF2.5のつまづきポイント
高速ループとなります。
覚えてしまえば便利ですよ奥さん。


第五回:「高速ループ」

「高速ループ」とはCF2.5の機能の一つで
ループ名を付けて指定した回数イベントを実行する。
と、言うものなのだが・・・文字じゃわからんわな。

CF25_kouza_v500.zip (108.22kB)

ダウンロード

なので、今回も講座MFAを覗きながら
ひとつひとつ見てみましょ。

高速ループの基本的な使い方

新規アクションの「特別」(歯車アイコン)から使います。
で、先程のように数式エディタで
名前と回数を指定し、今度は条件で
先程名付けたループ名を条件にすることで
そのイベントを回数分実行します。書き方的にはこんな感じです。

ちなみにこの書き方をすると
アクティブの変数Aにはフレーム開始時に1しかたされませんが
高速ループを回した方は変数Bに1を足すを30回行うという処理になります。

とにかく、名付ける→回数指定→それを条件としたイベントを作る。
コレが一連の流れとなります。

ループインデックスの取得

高速ループの基礎的な使い方の一つとして
「ループインデックス」を条件としたイベントです。
数式エディタの「特別」から「高速ループ」「ループインデックスの取得」で
ループ回数を取得します。

ただ、ループインデックスを条件とするには
「特別」の2つの一般値を比較を使います。

これは上の数式と下の数式の結果を比較して条件とするものです。
かなり便利なコマンドなので覚えておきましょう。

で、この場合は「ループ3」のインデックスが「0」の時
という条件になります。

それから、ループインデックスは
0から始まるためそこだけは注意です。
なので、30回回すと0~29を返すという結果になります。
後述する各ループも同様です。

各ループ(ForEach)

高速ループは非常に便利なものですが
オブジェクトの個数分普通に高速ループしても
どのオブジェクトがどのインデックスなのかわからないのである。

そこで使うのが各ループ(ForEach)です。

これはオブジェクトの個数分、指定した名前のループを回すのは同じなのですが
こっちはちゃんとインデックスを取得する方法があり
主にオブジェクトを特定するという使い方をします。

ただ、こちらは「特別」からループを使うのではなく
「ループを回したいオブジェクト」から「カウント」
そして「各ループ」を選択します。

ループインデックスの取得も同様です。

こちらもインデックスは0から始まっていますが
インデックスの開始は一番新しいオブジェクトから始まります。
なので、古しいオブジェクトになると一番大きい番号になります。
古しい方から始まるには工夫が必要となります。

高速ループを使ったイベント例

講座用MFAに2つほど載せておりますが軽く解説します。

クリックすると増えるオブジェクト
簡単な使い方で「オブジェクトをクリックする」条件を使い
その条件が満たされるとループを3回回してオブジェクトを
ランダムな位置に3つ生成するというものです。

そんな面倒なことしなくてもいいんじゃね?

と、思われそうなので向こうに失敗例も置いてあります。
オブジェクトの生成の後に生成したオブジェクトに対するイベントは

こんな感じに書いても実はうまくいかず
左上にイベントが重なって出来てしまいます。
なぜそうなるかはよくわかってない。(それでいいのか)
でも、とりあえず同じイベント内で複数制作せずに
高速ループを利用したりCF2.5+ならば子イベントを利用するなりしましょう。

ループインデックスを方向に使う
これはよく使われると思われる方法。
CF2.5の方向は0~31までの32方向で指定できます。
(ベクターならば0~360度まで・・・だと思う)

なので32回ループすれば講座用MFAのように
全方位に弾を発射することができるようになります。

方向の指定方法は「方向を変えたいオブジェクト」→「方向」
「方向を選択...」でいかの表示が出たら「1+1」のアイコンを押して
数式エディタを開くことで指定できるようになります。

32以上はどうなるかよく覚えてない。(おい)


とまあ、こんな感じでザックリと説明してみました。
この高速ループ、今後もちょいちょい出てくると思うので
その時はココやMFAを覗いて復習しておいてくださいまし。

次回は・・・次回は・・・

思いつかん!
(ダメじゃねーか)

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Master.typeX 2019/11/08 21:33

CF2.5講座:第四回「超簡単なゲームを作ってみよう!」【追記あり】

どうも、Master.typeXです。
今回はいきなりですが
超簡単なゲームを作るということになります。

後にブロック崩しも作りますが
今回はそのためのスモールステップだと思ってください。

では行ってみよう。


第四回:「クリックゲームを作る」

今回作るゲーム

今回作るゲームは上記のリンクにある
クリックでアクティブオブジェクトを血祭りにあげるゲームです。

すっごい簡素だけどこの程度ならば
30分程度で作れちゃいます。

ちなみに行数はたった30行。フレームの遷移などもなし!
まあ、お手軽ですよ奥さん!

今回は講座用MFAを覗きながら進めるといいでしょう。

CF25_kouza_v400.zip (103.34kB)

ダウンロード

工程1:必要なオブジェクトを作る

まずは2つのオブジェクトを作りましょう。
作るオブジェクトは「計算用」と「アクティブ」です。
画像は変更せずにそのままです。

名前を変更するには、作ったオブジェクトを
右クリックした時のメニューにある
「名前を変更」で変えることが出来ます。
多分、アクティブと続けて作ると
名前が「アクティブ 2」というのができるので
そっちを「計算用」にリネームしてやりましょう。

次に作るのは「カウンターオブジェクト」を2つです。
カウンターはリスト内の「データ」のところに分類されています。
こっちは名前を変えないでおきましょう。

そして「文字列」を3つ。こちらも名前は変更しません。
文字列はリスト内の「テキスト」のところに分類されています。

工程2:オブジェクトの設定を変える

次は作った各オブジェクトの設定を変更していきましょう。
オブジェクトを左クリックすると画面左下の「プロパティ」が開きます。

ここでオブジェクトの動作設定や
変数やフラグの作成やリネームなど他にも色々と出来ます。

ちょっと駆け足になりますが
各オブジェクトのプロパティを変えていきましょう。

「計算用」
「値」のタブ(A-Zのアイコン)を開き
「OV_カウント」「OV_出現時間」の変数を作りましょう。
フラグも「フラグ 0」を作ってください。
次に「ランタイムオプション」のタブ(紙の上に赤い矢印のアイコン)を開き
「オブジェクトが動作領域から離れている場合破壊」のチェックを無くし
「表示領域から離れすぎている場合オブジェクトを無効」を「いいえ」に変更します。
その後、オブジェクトを白いエリアの外の適当な位置に移動させて完了です。
白いエリア内にいると見えてしまうので。

オプションの「破壊」や「無効」はおまじないみたいなものだと思ってください。
今のところは。

「アクティブ」
こちらは「ランタイムオプション」で計算用と同じ設定にして
「開始時に作成」のチェックを外してください。
そうするとフレームが開始されても
イベントで作成しない限りオブジェクトが作成されないようになります。
それが終わったら白いエリア外に移動させましょう。

「文字列」・「カウンター」
「設定」タブ(紙の上にチェックマークのアイコン)を開き
「パラクラフ1」に「壊したオブジェクトの数」と書いておき
白いエリア内の左上あたりに置きましょう。
その少し横に「カウンター」を移動させます。

「文字列 2」・「カウンター 2」
先程の文字列同様「設定」タブを開き
「パラクラフ1」に「現在のオブジェクトの数」と書き
「文字列」の少し下辺りに置きましょう。
さらにその隣に「カウンター 2」を移動させておきます。

「文字列 3」
こちらは「サイズ/位置」タブ(四角と矢印のアイコン)を開き
「位置」をX:0、Y:0に指定して移動させます。
その後、「サイズ」を幅:640、高さ:480に設定し
「設定」タブを開き「パラクラフ1」に
「げーむおーばー」とでも書いておきましょう。
【追記】「ランタイムオプション」で「開始時に作成」チェックを切っておきましょう。メチャクチャ忘れてた。


これでオブジェクトの設定は完了です。
次にいよいよイベントを書いていきましょう!


工程3:イベントを書いていく

上部メニューから「イベントリストエディタ」を開きます。
そして、新規条件を選択し以下の順でイベントを組んでいきましょう。
またちょっと駆け足になりますがご容赦くだせぇ・・・

  • フレームが開始
    計算用 : OV_出現時間 を 120 に変更

↑これはフレーム開始時に出現時間をリセットするというものです。

  • 計算用: フラグ 0 が無効
    計算用 : OV_カウント に 1 を追加

↑コレは「計算用」の「フラグ 0」が無効の時の条件です。
この「フラグ 0」は後々使っていきます。
そして、内容は単純に「OV_カウント」に「1」を追加しているという意味です。

  • 計算用: フラグ 0 が無効
    • OV_カウント: 計算用 >= OV_出現時間( "計算用" )
      新規オブジェクト : 次のオブジェクトを作成: アクティブ 場所: (0,0) レイヤー 1
      アクティブ : X 座標を RRandom(32, 608) に変更
      アクティブ : Y 座標を RRandom(32, 448) に変更
      計算用 : OV_カウント を 0 に変更

↑こちらも「計算用」の「フラグ 0」を使用しています。
イベントの内容としてはザックリ説明すると
「アクティブ」を座標X:0、Y:0に作成後
XとY座標をランダムなところに変更し、カウントをリセットする。
というものになっています。

  • ユーザーが 左ボタンをクリック - アクティブ 上
    カウンター : カウンターを 1 増加
    アクティブ : 破壊

↑こちらは「アクティブ」の上で左クリックすると
「カウンター」が増加し、「アクティブ」を破壊する
という処理になります。

  • 常に実行
    カウンター 2 : カウンターを NObjects( "アクティブ" ) にセット

↑こちらは「カウンター 2」の数値を「アクティブ」の数にセットするという処理です。

  • カウンター = 5
    + イベント連続時にアクションを 1 回のみ実行
    計算用 : OV_出現時間 から 10 を引く

  • カウンター = 10
    + イベント連続時にアクションを 1 回のみ実行
    計算用 : OV_出現時間 から 10 を引く

  • カウンター = 15
    + イベント連続時にアクションを 1 回のみ実行
    計算用 : OV_出現時間 から 10 を引く

  • カウンター = 20
    + イベント連続時にアクションを 1 回のみ実行
    計算用 : OV_出現時間 から 10 を引く

  • カウンター = 25
    + イベント連続時にアクションを 1 回のみ実行
    計算用 : OV_出現時間 から 10 を引く

  • カウンター = 30
    + イベント連続時にアクションを 1 回のみ実行
    計算用 : OV_出現時間 から 10 を引く

  • カウンター = 35
    + イベント連続時にアクションを 1 回のみ実行
    計算用 : OV_出現時間 から 10 を引く

  • カウンター = 40
    + イベント連続時にアクションを 1 回のみ実行
    計算用 : OV_出現時間 から 10 を引く

↑コレは「カウンター」の数値が5ごとに
「計算用」の「OV_出現時間」から10数値を引いていることになります。
こうすることで出現時間が短くなり、ゲームがスリリングになります。

  • 計算用: フラグ 0 が無効
    + カウンター 2 >= 10
    新規オブジェクト : 次のオブジェクトを作成: 文字列 3 場所: (0,0) レイヤー 1
    計算用 : フラグ 0 を有効に設定

  • "Space" キーを押した時
    + 計算用: フラグ 0 が有効
    ストーリーボードコントロール : 現在のフレームをリスタート

↑最後のコレがゲームオーバーの処理と
再スタートの処理となります。


うん、あれだ
あえて言わなくてもわかりづれぇ!!!

流石に一つ一つ説明していくのも大変なので・・・
どこにそのコマンドあるの?とかあれば
コメント欄にお書きくださいまし・・・すまねぇ・・・

とまあ、でもコレを書いていけば
最初に載せたような簡単なクリックゲームが作れるんです!

そして次第に慣れてしまうと
背景を付け足したり、お邪魔キャラを用意したり
あと、時々爆発するオブジェクトが出てきたり
更にその爆発に巻き込むと誘爆したりなど・・・

それをすべてまとめた結果がコレだよ!!!

なんと酷い・・・

ま、まあそういうことで・・・
とにかくこれで最初のステップは完了だ!
うん!そういうことにしておこう!

次回はシステム面に戻り
CF2.5のつまづきどころの一つ、「高速ループ」をやろうと思います!

コレを覚えれば一気にレベルアップですよ!奥さん!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

« 1 2

月別アーカイブ

記事を検索