« 2013年1月 | トップページ | 2013年3月 »

2013.02.28

とある魔術と科学の群奏活劇

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

とある魔術と科学の群奏活劇(初回限定生産版)
とある魔術と科学の群奏活劇(初回限定生産版)

「劇場版 とある魔術の禁書目録 エンデュミオンの奇蹟」の
前日譚のゲームです。
ここ数日、地道にプレイしています。
これをプレイしているのでブログの記事が書かれていないともいう・・・

といっても一部選択式のアドベンチャーなので
あまりゲーム要素はない。
どっちかというと選択肢があるキネティックノベルみたいな感じ。

魔術編と科学編があって
それぞれに表と裏のストーリーがあって
たぶん、後残っているのは魔術編の裏だと思う。

魔術編の表は、基本的に劇場版の入場特典の小説のストーリー。
もちろん小説にはないシーンとかもあるので
こっちはこっちで楽しめます。

科学編はレールガンチームのメンバーが中心。
美琴、黒子、初春、佐天さんとそれぞれにストーリーがあって
それらの話が繋がってストーリーの全貌が見えてくる。

1日の1時間が1パートでパートごとに
キーパーソンをチェンジするんだけど
ここで選択をミスるとその後の時間帯の
ストーリーが選べなくなったりするので
適度にマニュアルセーブしておいた方が良いかもしれない。

でも、ゲームをしていると
あぁ、こういう演出、初音ミク冒険記でもやってみたいなぁ
と思ったりしますねぇ。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.23

劇場版 とある魔術の禁書目録 エンデュミオンの奇蹟

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

今日は、朝からディノスシネマ札幌へ。

目的は、「劇場版 とある魔術の禁書目録 エンデュミオンの奇蹟」の当日券のゲットだ。

毎週欠かさず、「劇場版とあるラジオの禁書目録」をチェックしていながら
前売り券は買っていなかったというかげさん。

実は、この劇場版、数量限定の先着入場特典として
電撃劇場文庫「とある魔術の禁書目録-ロード トゥ エンデュミオン-」
という原作者、鎌池和馬描き下ろしの222ページの文庫がもらえるのだ。

原作小説を全巻持っている(DVDなどの特典などの一部の例外を除く)身としては
やっぱり欲しいじゃない。

先着ということで
一応、朝一番の公開時間から30分前には並ぼうと思っていたんだけど
ちょっと早めに家を出て、40分前に到着!

早速、受付の7階へGo!

ぐはつ! 何、この長蛇の列!

仕方がない最後尾に並ぼう。
って、これ最後尾どこ?



なんてこったい、階段で2階と3階の間まで行くことに・・・

結局、朝一番の回が始まる頃には、
まだ7階にすら到達していなかった・・・orz

ということで2回めの上演のチケットは確保。
札幌に来てから、結構、映画を見てるけど
さすがにチケット購入に1時間近く並ぶってのは
体験したことが無かったぜぃ。

ちなみにグッズ販売では、
例によってパンフレットとクリアファイルをゲット。

Toarumovie01

右がパンフレットで、左が入場特典の文庫です。

ちなみにかげさんが購入したクリアファイルのセットは、
かげさんが買ってからしばらくしたら
売り切れになっていた。

Toarumovie02

良いタイミングで買ったZE☆!

エンデュミオンってのは、学園都市製の宇宙エレベーターのこと。
その名の通り、エレベーターで宇宙に行っちゃうという建造物。

とある魔術の禁書目録らしく
女性の新キャラが登場し、上条さんと絡んでいく展開。

劇場版らしく、スケールが大きく、
ステイルの弟子とか、黒鴉部隊とかのアクションも素晴らしい!
うん、これは映画館で見たほうが良いよね!

そして原作では表現できない音楽が絡んでくる。
まぁ、この当たりは上演後、
マクロスか? みたいなことを何人かの人たちが言ってたけど・・・

原作では出てこない超電磁砲チームの佐天さんが
禁書目録に出ているだと!
なんて驚きもあったりした。

そして入場特典の小説は
映画内容とは、直接は関係がないものの
こんなこともあったのね、というストーリー。
さすがにロード トゥ エンデュミオンというだけあって
エンデュミオンを出てくるんだけどね。

コッチのほうがインド神話系魔術結社なんてのも出てきて
魔術サイドの話になっていますねぇ。

さて、明日は、「とある魔術と科学の群奏活劇」をプレイしようかな。
とある魔術と科学の群奏活劇(初回限定生産版)
とある魔術と科学の群奏活劇(初回限定生産版)

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.20

セサミンEXの無料サンプルが当たった

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

会社で申し込んだ人が、結構当たっているので
かげさんも応募してみた。

無料お試しのお申込み | セサミンEX 公式サイト - サントリーウエルネス

前はWeb申し込みがあったみたいなんだけど
今は電話申し込みしかないみたい。

先週申し込みしたところ、当選した場合は10日後までに
サンプルが届くということで、
当たれば来週辺りにくるかなぁと思っていたら
今日、集合ポストに入っていた。

おぉ! 
ファンケルみたいに集合ポストに入れてもらえるのか!

ライオンのラクトフェラミンの時は、仕事が忙しいと
毎回受け取るまでに時間がかかって不便だったので
やめちゃったんだよね。

セサミンEXは、今日から飲んで見る予定だけど
良さそうだったら受け取りもしやすそうだし継続してみようかな。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

初音ミク冒険記でブレイクオブジェクトを作ろう2

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

昨日はPhotoShopを使っていろいろやっていたので
i7マシンを使っていたのだが
今日は、画像を使わないのでDual CoreのXPで
ブレイクオブジェクトを作ろうとしたところ
なんか初音ミク冒険記が異様に重い。

変更したのは、ブレイクオブジェクトの描画処理なので
たぶんマスクを使った描画処理が遅いのではないかと推測。

ブレイクオブジェクトの描画があるマップから
ブレイクオブジェクトの描画があるマップへ
切り替わると途端に動きが軽くなる。

マスクが原因で確定だろう。

普通に考えて、マスク処理は
CPUパワーもしくはグラボのパワーを必要そうな気がする。

ということでマスク関連の処理をコメントアウトすると
従来通りの速度でサクサク動く。

よく見るとDXライブラリのリファレンスにも、こう書かれている

この関数を使用しなければマスク画面を使用できない主な理由には マスク画面を使用するにはビデオメモリ(VRAM)をグラフィック画面 1つ分、 メインメモリもグラフィック画面一つ分必要とするので、 マスク 画面を必要としない場合にもこれだけの資源を占有されてしまうのは 単純に もったいないから、及び、 マスク処理というのはかなりのCPUパワーを 必要とし、 描画処理に多大な負担を与える事となるので 使用しない時にも 常にマスク画面が存在するのは不都合極まりないからです。

ちなみに、この記述は読まずに作ってた(笑)
ということでブレイクオブジェクトの描画にマスクを使う大作戦は失敗でした。

そもそもマスクを使おうと思ったのは
マップ画像によってブレイクオブジェクトが色的に馴染まないことがありそうなので
ト音記号の中を描画する時に中の部分を透明にして
そこにグラデーションがついたものを表示すると
マップ毎にグラデーションを切り替えたら馴染むんじゃないか?
と思ったからだったりします。

まぁ、マップ毎にブレイクオブジェクトを作れば良いんだけど
グラデーションの方が作るのが簡単なので・・・
ってレイヤを使ってやりくりすればマップ毎のブレイクオブジェクトも
そんなに難しくは無いんだけどね。

ちょっと違う描画処理もやってみたかったってのもあります。

さぁて、それじゃあ、ブレイクオブジェクトの表示をどうしたものかなぁ。
単純に固定描画、もしくは、ブレンドモードを使った描画でアクセントを付ける
ってのしか思いつかない。

ドラキュラみたいにロウソクとかの明かり系だと
アルファブレンドで作るのは簡単なんだけど、
さすがに森の中にロウソクってわけにも行かない(森林火災になる)し
ロウソクだと丸パクリにもほどがある。

音符と同じように揺れるのだと芸がない気もする。
もっとも、かげさんのプログラミングテクニックじゃ芸がある状態にするのが難しいけど・・・

コインのようにクルクル回るってのもありかもしれないが・・・。

ここで悩んでいるとネギが当たって壊れた時の処理を作るのが遅くなるし
とりあえず、単純固定描画にしておくかな。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.19

初音ミク冒険記でブレイクオブジェクトを作ろう1

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

悪魔城ドラキュラ・シリーズでの「ろうそく」相当のもの、
要するに攻撃すると壊れるものを
初音ミク冒険記ではブレイクオブジェクトと呼ぶことにする。

初音ミク冒険記だとブレイクオブジェクトの画像として
何が良いかなぁ?と考えた時
やっぱりVOCALOIDだから音楽関係のが良いんじゃないかと思い
ト音記号にしてみた。

Screenshot0090

初の試みとしてDXライブラリのMask描画関連の機能を使ってみた。
ト音記号の部分は、グラデーションがかかったループ画像が
常時動くようにしている。
(動画にすれば良かったかもしれない・・・)

現時点ではとりあえず描画だけで
攻撃すると壊れて音符やコインが出てくるようになるのは未作成。

ブレイクオブジェクトは、音符やコインが出てくるものの他にも
作れるようにしようと思っている。

例えば、ある程度耐久力のあるものを壊してマップの仕掛けを動かす
ってのも面白いかなぁと考えているので。

一応、ブレイクオブジェクト関連が完成した段階で
次の公開を行う予定でいます。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.17

散歩に出かけたら初めて雪ミク電車を見た!

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

ボカロタウンのマップ画像のネタ探しに
デジカメを持って街中にでていたら雪ミク電車を発見!

Snowmikudensya

これまで一度も見たことが無かったので嬉しかった。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.16

「初音ミク ライブパーティー 2013 in Sapporo ミクパ♪」のグッズ販売

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

このところ遅刻な記事が続いていますが
今日も明日もそんなのが続きます。

ミクパのチケットは取れなかったものの
ミクパの公演前の時間でグッズ販売の時間があり
そこはチケットの有無に関わらず入れるので行って来ました。

かげさんは、クリアファイルを集めるのが好きなので
クリアファイル5枚セットを目当てで行って来ました。
写真を撮ろうと思ったのですが
公式サイトの方が綺麗なレイアウトなので
興味がある人はそっちを見て下さい。
http://5pb.jp/mikupa/goods_sapporo_20130209/goods9.html

とここまでは計画的な購入だったのですが、
衝動買いしたものもありました。

Nenputiset
ねんどろいどぷち ボーカロイド#01 初音ミク KAITO はちゅね グッドスマイルカンパニー(全11種セット)

えーとですねぇ、
実はコレの12箱入りというのがありまして
1箱500円で定価は6,000円なんですが
人気商品のため、現在amazonで安くても9,500円くらいするものです。

それが、定価の6,000円で売っているとは!

ただ、パーツが硬くて中々組み立てられないという評判もある品。
どーしようかなぁと思ったのですが、結局買ってしまいました。
後になって欲しいと思っても高くつくしね。

かげさんも結構前に3DSを購入したので
Project Miraiのねんぷち付きのやつを持っていて
初音ミク冒険記の作成してるマシンの
ディスプレイの前に飾っていたりします。

初音ミク冒険記は、
少し作って一段落したら気が抜けて
しばらく開発をしないってことがあるんだけど
Project Miraiのねんぷちを見て
そろそろ続きを作ろうか!と思ったりするので
これが増えると「初音ミク冒険記」を作るモチベーションに繋がるかも!
と考え購入することにしました。

で、やはり事前に仕入れていた情報通り
各ねんどろいどを支える支柱が固く、
KAITOのマフラーは差し込む穴よりも
マフラーの突起の方が1ミリ以上大きいときた。

どうにかミクの支柱とKAITOのマフラー以外は頑張って組み立てたが
この2つがどうにも組み立てられないでいた。
自立しないので支柱がないといけないんだけど支柱が刺さらないのは痛い。

ドライヤーを使うって方法があるらしいんだけど
キャラクターの方にドライヤーを使うのか
支柱の方にドライヤーを使うのか分からず
ネットで調べたらグッドスマイルカンパニーの記事を発見。

.「ねんどろいど ぷち らき☆すた シーズン1」をお買い上げのお客様へ

なるほど差し込まれる側のキャラにドライヤーを使うのね。
試してみたら、スゴくあっさりと組立が出来た。
もっと早く試すべきだったな。

ルカの手がポロポロと抜けやすく、
MEIKOも支柱を組み立てる時に下半身がポトンと落ちるなど
アクシデントも若干ありましたが無事に完成しました。

では、完成したものの写真です。

Seizoroi

ケースはダイソーで購入したもので手前が広くなっているから
上にいくほどケースが反っているので微妙な角度になってしまった・・・

12個入りですが、実際には全10種類+シークレット1種類で11種類あり
しかも12個入りの箱1つで全部が揃わないこともあるらしいのですが
シークレットも含め、全部入っていたので
Project Miraiのも合わせると12個になります。

ミクやはちゅね、ネルの髪が横幅を取るので
1つのケースに6個入れることが出来ず、
サイハテミク、はちゅねだけ別のケースになった。

このケースには、後で碧の軌跡の限定版のねんぷちを入れようかな。

それにしても「はちゅね」は可動パーツが多くてビックリしたぜぃ!

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.15

第63回札幌雪まつり、遅刻な記事ラスト!

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

最後は、ミクさんたちをまとめて紹介するよ!

Snowfes63mikuetc01

今年の雪ミクに行く前にコチラ!
立体感があって良い感じです。
札幌放送芸術専門学校だけに芸術的だ!

Snowfes63mikuetc02

今年の雪ミク。
なんか、手前に小さいのがいっぱい。

Snowfes63mikuetc03

その正体は、歴代のねんどろいど雪ミクたち。
しっかり中央に今年の雪ミクがいらっしゃいます。

ちなみにかげさんが写真を撮っていた時に
ねんどろいどの持ち主さんが、
「そろそろ下げても良いでしょうか?」
と言っていたので、
かなり良いタイミングで雪ミクさんの前にいたのだと思う。

Snowfes63mikuetc04

そして、かげさんが今年注目していた
重音テト&雪歌ユフ。
ツインドリルかエナメルPのツイートで
雪像作り中に「じゅうおんてと」と読んだ人がいたというのがありましたが
重音テトは「かさねてと」です。

Snowfes63mikuetc05

看板とテトを撮ろうとしたからユフが写ってなかったので
ユフの方から撮り直し。

実は、この雪像、後ろにはデフォ子がいたりします。
が、12丁目会場は雪像の裏側が歩けないので
道路越しにしか見ることができず
しかも夜なのでデジカメで撮影すると何も映らないというワナ。

暗がりから見えるデフォ子も素敵でしたよ!

雪像、氷像づくりに参加した皆さん。
お疲れ様でした。
とっても楽しませて頂きました。
ありがとうございます!

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

第63回札幌雪まつり、遅刻な記事4

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

昨日は、初音ミク冒険記の画像や効果音を作っていたら
記事を投稿する前に日が変わってしまった。

ということで遅刻記事の第4弾です。

Snowfes6317

リラックマ。
和むわー、やっぱ。

Snowfes6318

形がシンプルなせいか
テレビ父さんは、いくつか見受けられた。
その中からへび年にちなんだものをチョイスしてみた。

Snowfes6319

本日の和み系第2弾のonちゃん!

Snowfes6320

映画にもなったし、ありましたねぇ。

2013/02/16追記
載せ忘れました!

Snowfes6321

海外から雪像作りに参加したところで
優勝した雪像。

ぞうさんがリアルだ。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.13

第63回札幌雪まつり、遅刻な記事3

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

第63回札幌雪まつりの記事第3弾

Snowfes6312

大谷くんと栗山監督。
やっぱりホットな話題だけに雪像がありましたね。

Snowfes6313

ちびまる子ちゃんの大雪像。
まるちゃんがマジでデカイ!

Snowfes6314

トトロ。
この雪像は、結構早い段階からこの出来だった。

実は39度の熱が出る前に雪像作りを見学してきたのだ。
去年はミクの雪像が倒れたりしたので
ちょっと作成中のも見に行っていたりします。
(まぁ、メインで見たかったのはテト&ユフだったんですがね)

Snowfes6315

お次は、みんな大好きドラえもん。
何か胴体が太いせいか中年太りのドラえもんに見えた。

Snowfes6316

日ハムのキャラクターBB!
今年も日ハムに頑張って欲しいです!

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

第63回札幌雪まつり、遅刻な記事2

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

第63回札幌雪まつり記事の第2弾!

Snowfes6307

ライトアップされてなくて暗い写真になっちゃった大きめの雪像。

Snowfes6308

人混みが激しくて斜めからの写真しか撮れなかった大雪像。
めちゃくちゃコマカイです。
作った人たちスゲーな。

Snowfes6309

へび年なので。
蛇関連では、この雪像が一番良かったと思う。

Snowfes6310

ほのぼのする、癒される雪像でした。

Snowfes6311

小さめの雪像の中では、かなり細かくて
この雪像の前では、「精巧だなぁ」という人たちが多かったです。


 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

第63回札幌雪まつり、遅刻な記事1

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

ようやく写真の画像サイズとかを調整しました!

写真の順番は、ほぼ撮影順です。
1記事に5つくらい写真にする予定です。

Snowfes6301

雪まつりと言いつつ、いきなり氷像。
スノーフォックスの写真です。

Snowfes6302

氷のお城。

Snowfes6303

大雪像です。(人混みが激しくタイトル未確認)

Snowfes6305

プロジェクトマッピングで話題の大雪像。
かげさんがいった日から中止になったので見れなかった。

けど、ITMedia Newsで以下の記事を発見。
「雪祭り」で中止のプロジェクションマッピング、動画がYouTubeに
YouTubeで見ることが出来ました。

Snowfes6306

お次も氷像です。
なんか幻想的な感じですね。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.12

明日こそ雪まつりの記事を書きます

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

夕方に歯医者に行ったりしてたので
割とバタバタした夜を過ごしてしまった。

一応、雪まつりの記事で使う写真を選ぶところまでは
行ったんだけど、サイズ調整とかは明日まとめてやる予定。

たぶん、5つの記事になると思う。

書きたい記事は他にもあるんだけど
雪まつり→サッポロファクトリーホール→新千歳空港
という順番で記事を書こうと思ってます。

ただ、割り込みで初音ミク冒険記の記事が入るかもしれません。
攻撃ボイスの作成が残っているけど
攻撃スキルが2つ増やしたので。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.11

いかん、写真の整理をしないと雪まつりの記事が書けん!

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

今日は雪まつりの記事を書こうと思っていたんだけど
この3連休で結構あちこちで写真を撮ったので
写真の整理が追いつかねぇー!

実は、雪まつりの他にも
雪ミクスタンプラリーなるものをコンプリートしようと
あちこち出かけていたので
ファクトリーホールで撮った
初音ミクのデザインをしたKEIさんの絵とか
新千歳空港のイベントホール翔で撮った写真などがありましてね・・・。

ということで、すみませんが
後日、雪まつりや他の写真を載せた記事を書きます。

実は、3連休にあったミク関連のイベントでは
北海道庁赤れんが庁舎でやっていた
北海道×ピアプロコラボ
SNOW MIKU 2013イラスト&公認ソング展
の存在をすっかり忘れていたのは失敗でした。

スタンプラリーをコンプリートしたところで
達成感があって忘れてたぜぃ。

一応、気づいたんだけど18時までのところを
17時半に気づいたんじゃ時間が遅すぎ。
移動だけでタイムアップでござる。

ミクパは存在自体に気づくのが遅くて
せっかくの札幌公演なのにチケットをゲットしてなかった上
NOT TV独占放送とかありえねー。
せめてニコ生で有料チケットとかやって欲しかったぜぃ。
(きっと今回の札幌公演と3月9日の大阪公演のミクパの
 DVDが10月辺りに出るだろうから、そこまで我慢だね、こりゃ)

ちなみにミクパの会場でやってたグッズ販売は
チケットがなくても入れたので行って来ました。
その辺のことも後日記事にしようと思います。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.10

初音ミク冒険記、足場に向かってジャンプすると勝手に更にジャンプすることがある問題の解決

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

実は、リファクタリング祭りをしている最中に
先日の記事に書いた
・足場に向かってジャンプすると勝手に更にジャンプすることがある
 特に坂に向かってジャンプする時に発生する
 どうやら坂にぶつかる時に
 左右への移動キーを押していると起きるみたい

というバグの原因が判明した。
が、対処方法が中々思いつけなくて、かなりの苦戦を強いられた。

何度も
14歳からはじめるC言語わくわくゲームプログラミング教室Visual Studio 2008編―Windows XP/Vista対応
14歳からはじめるC言語わくわくゲームプログラミング教室Visual Studio 2008編―Windows XP/Vista対応
を読み返して、本に書いてあることは実装できていることを確認。

いくら読み返しても問題が分からない。
そう、本に書いていない部分でかげさんが追加した機能やバグ修正が問題だったのだ。

具体的には、追加した機能では空中制御
バグ修正では、上り坂大ジャンプ/下り坂小ジャンプ
こいつらが、非常に状況をわかりづらくしていたのだ。

初音ミク冒険記で解決策に困ったやっかいなバグのいくつかは
「空中にいる、かつ、地面にいる」時に起こる。

それ日本語おかしくね?
と思うかもしれないが、そこはゲームプログラムの世界である。
起こりえるんだなコレが。

要するに「ジャンプした先に地面があるパターン」だ。
具体的には「ジャンプ上昇中に地面にいる」という状況である。

上述の本にも書かれているんだけど図解しよう。

Hanteien

上の図は、試練の洞窟 エリア3の上の方にある
連続ジャンプで上っていく地面だ。

ミクは上に向かってジャンプしている。
地面の当たり判定は、地面の一番上の線。
ミクの当たり判定は、灰色の丸の部分。
大きいのはダメージを受ける判定円で足元が着地の判定円だ。

地面の線に対してミクの足元は接触しているので
この状態が「空中にいる、かつ、地面にいる」という状態だ。
実際に空中にいるというのが解除されるのは
ちゃんとミクが着地したタイミングである。

ミクが着地するというの説明しよう。
上の図で説明すると、今度は飛び降りている最中だと思って欲しい。
飛び降りの時は、飛び降りコマンドを受け付けた時にいる足場は、
着地判定の対象外となる。

なので対象となるのは、現在の足元の判定円の下にある足場だ。
ここに、上から下向きに下りると着地と扱う。

さっきはジャンプだったので上昇中は、足場の接触判定は無視する
というパターンに該当していた。

ここに「初音ミク冒険記」の坂移動中のジャンプについて考えてみる
で書いていた解決策が加わるとどうなるか?

さっきの例は平らな足場でのジャンプや飛び降りだったが
今度は斜めの足場である。

試練の洞窟のエリア2で考えてみる。
Screenshot0089

ミクのいる場所から坂に向かってジャンプする
先のジャンプの例に当てはめると「上昇中は足場の接触判定は無視する」に該当する。

ココで問題になるのは、ジャンプ上昇中に坂に接触した場合だ。
「上昇中は足場の接触判定は無視する」ので着地扱いにならない。
そして坂移動中のジャンプの対処は、該当記事の通りである。

つまり、対処する条件は、
上り坂、もしくは下り坂で「空中にいる、かつ、地面にいる」だ。

当然、上り坂大ジャンプや下り坂小ジャンプの対策で
ミクの移動ベクトルを通常ジャンプ分、足しているわけだから
見た目は坂に着地しているのにもう1回ジャンプしたような動きになる。

これが、「足場に向かってジャンプすると勝手に更にジャンプすることがある」原因だ。

どうなって欲しいか文章にすると以下の通りだ。
1.上り坂大ジャンプや下り坂小ジャンプの対策は、
  ミクがこれからジャンプする時だけ動いて欲しい。

2.ジャンプして一度「空中にいる、かつ、地面にいない」状態になってから
  上り坂大ジャンプや下り坂小ジャンプの対策が動かないで欲しい

単純に考えると
ジャンプボタンを押した瞬間だけ
上り坂大ジャンプや下り坂小ジャンプの対策が動けば良い
のだが、これだとミクが坂にいる関係で
ジャンプした直後で完全に空中に浮くまでのフレーム数が
1だと良いかもしれないけど2以上だと2フレーム目以降で
大ジャンプもしくは小ジャンプしてしまう・・・

2を実現しようとしても「空中にいる、かつ、地面にいない」状態になってから
というのが難しい気がする・・・

それに厄介なのが空中制御ができることで
上昇中、下降中だけじゃなく、ジャンプしつつ
ジャンプ頂点(上昇中でも下降中でもないタイミング)で
水平移動ができるタイミングがあるところ。

そうなるとジャンプで上昇中とか下降中とかの判定をしても
上手くいかないパターンがあるわけで・・・



ちょっと考えれば分かりそうなものだけど
思いつくのに1時間半くらいかかった。

接地状態から「空中にいる、かつ、地面にいない」状態になるまで
どのくらいのフレーム数があるのか分からないけど
1秒間60フレームだとして大体10フレーム(1/6秒)もあれば
その状態になるんじゃないかと。

この仮定に基づいて、ジャンプした瞬間から
上り坂大ジャンプや下り坂小ジャンプの対策は動くのだけど
その効果を10フレームを超えたらなくしてしまう。
という案を考えてみた。

ジャンプした瞬間から「空中にいる」という状態になるので
「空中にいる」間は「ジャンプ中のフレーム数」をカウントアップしていき
「空中にいない」状態になったら「ジャンプ中のフレーム数」を0にする。

2013/02/10追記
ソースプログラム載せるの忘れてた。

jumpFrameCounterはmyGame.hに追加

2013/02/10追記
■jumpFrameCounter変数の初期化

int initGame(){
AppLogAdd("initGame stageNo=[%d] mapNo=[%d]\n", playerInfo.stageNo, playerInfo.mapNo);

usedLineNum = 0;
memset((char *)landLine, 0x00, sizeof(Line2D)*128);

// 接地中フラグ
onTheGround = FALSE;

// ジャンプ中フラグ
nowJumping = FALSE;

// ジャンプフレームカウンタ
jumpFrameCounter = 0;

// エアリアルステップフラグ初期化
aerialStepFlg = FALSE;

2013/02/10追記
■playGame関数の最初の方


//***************************************************************
// オートコレクト関連
//***************************************************************
autoCollectAnime++;
autoCollectAnime = autoCollectAnime % 60;

//***************************************************************
// ジャンプ関連
// (坂道に向かってジャンプした時、勝手にもう1回ジャンプする対策)
//***************************************************************
if(nowJumping == TRUE){
jumpFrameCounter++;
}else{
jumpFrameCounter = 0;
}

//***************************************************************
// マップレイヤー1の地形描画の呼び出し(背景)
//***************************************************************
drawMap_Layer1();

2013/02/10追記
■playGame関数の坂道ジャンプの箇所の修正前


// 接地中だが、上り坂または下り坂でジャンプ中の場合
// プレイヤーベクトルのy座標を通常ジャンプのy座標にベクトル補正する
if(((debugUpSlope == 1) || (debugDownSlope == 1)) && (nowJumping == TRUE)){
//printfDx("currentVector1.y=[%f]\n", currentVector1.y);
//printfDx("y=[%f]\n", playerInfo.playerVector.y);
playerInfo.playerVector.y = JUMP_MOVE.y;
}

2013/02/10追記
■playGame関数の坂道ジャンプの箇所の修正後


// 接地中だが、上り坂または下り坂でジャンプ中の場合
// プレイヤーベクトルのy座標を通常ジャンプのy座標にベクトル補正する
if(((debugUpSlope == 1) || (debugDownSlope == 1)) && (nowJumping == TRUE)){
//printfDx("currentVector1.y=[%f]\n", currentVector1.y);
//printfDx("y=[%f]\n", playerInfo.playerVector.y);

// ★この処理って
//  ・上り坂を上りながらこれからジャンプ
//  ・下り坂を下りながらのこれからジャンプ
//  には対応できても、ジャンプ中に坂に接地した時の考慮が無いんじゃないか?
playerInfo.playerVector.y = JUMP_MOVE.y;

// ジャンプしてから10フレーム後には、この処理をしないようにすれば
// 一度ジャンプして(地面を離れて)からのジャンプ上昇中に
// 坂に接地した時にonTheGround = TRUE、かつ、nowJumping = TRUEになったとしても
// (試練の洞窟のエリア2の一番上の坂に向かってジャンプし、
//  ジャンプの頂点に達する前に坂に当たってしまうとか
//  坂に向かってクイックステップやクイックムーブしながらのジャンプで
//  ジャンプの頂点に達する前に坂に当たってしまうといった状況でも)
// 上述の坂ジャンプによるジャンプ力の増減対策が効かないようにできると思う。
if(jumpFrameCounter > 10){
playerInfo.playerVector.y = 0;
}
}

コレでいけると思ってやってみたら上手くいきました!
数フレームだけミクの画像が微妙になる瞬間もあるみたいけど
意図しないジャンプを勝手にするよりは、ずっと良いと思う。

きっと、もっとスマートなやり方はあるんだろうけど
やり方が思いつかない以上、プログラムすることはできないしねぇ。

実は、このやり方、試練の洞窟 エリア2の下の方の上り坂で
ジャンプする方向がその坂とほぼ同じ角度の時
つまりクイックムーブで上り坂を移動中にジャンプってすると
ジャンプしているのか微妙な状況なのにジャンプの効果音がするんだよね。

もっとも、このやり方をする前と後とで同じ動きだったんだけど・・・
同じ動きだから気にしないで良いよねってことにする。
同じ場所でも通常移動やクイックステップだと上手く動くし。

適度に妥協も必要じゃないか?
そういうことにしときましょう。(笑)

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.09

初音ミク冒険記のソースでリファクタリング祭り

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

今日の目標は、以下の2つだ。
・ウータウの森入口のマップ画像描画を作る。
・ミクの攻撃スキルを作る。(今考えているのは2つの攻撃スキル)

ウータウの森入口のマップ画像描画を作る。

いろいろと考えたところ
マップレイヤが4つ→5つと増えたけど
こいつは特に問題なく作業が終わった。

そこで次にミクの攻撃スキルを増やそうと思ったんだけど
ちょっとmyGame.cppが長すぎて
機能を追加する箇所に行き着くまでに時間がかかるのが気になった。

実は前々から思っていたんだけど
myGame.cppのソースを他のソースに分離して
見通しを良くしたい。

ということでリファクタリング(プログラムの動作は変えずにソースを変更する)の
初歩の初歩である「メソッドの抽出」(意味のある塊で関数化する)をしまくることにした。

意味のある塊が既存ソースの内容と一致していれば
その部分を既存ソースへ移動していく。

もちろん、既存ソースだけじゃ相応しい移動先じゃないものは
新しいソースを作ってそっちに移動する。

そんなこんなで、myGame.cppとしては1780行短くなったが
めっちゃソースが増えた!(A;´・ω・)アセアセ

スパゲッティプログラムの様相が激しいplayGame関数が
見通しが良くなったのは収穫だと思う。
といっても250行短くなっただけだが・・・

まぁ、動きは変わらないけど、結構進展したわけで
予定通りには進まなかったけど結果オーライかな。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.08

初音ミク冒険記の「多重スクロールのバグ」対応

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

昨日投稿した記事につけた動画で
ウータウの森のマップで最初の方で
変なマップ画像のスクロールがあった件を調べてみた。

調査前の予想では、2つの原因が考えられる。

1.多重スクロール用に作った変数を初期化していない
 (まだ、初期化処理を作っていなかった)

2.セーブデータに多重スクロール用に作った変数を追加していない

先に2を考えてみる。
多重スクロール用の変数をセーブデータに入れれば問題ない気がする。

が、ここでポイントは「多重スクロール用の3つの変数」の値は
セーブデータにも残しているスクロール用変数を
元ネタにして計算で求めている点だ。

つーことは、
セーブデータに「多重スクロール用の3つの変数」を持たなくても
後から計算で算出できるってことである。

ふむ、2の問題は解決できるのでOKだ!
セーブデータのバージョンを3にしないとダメかなと思ってしまった。

じゃあ、問題は1なわけだ。

初期化といっても、計算で求めれば良い事が分かっている。
となると
セーブデータにも残しているスクロール用変数の初期化後じゃないとダメだ。

スクロール用変数の初期化タイミングは2パターン存在する。
1.セーブデータをロードした時
2.各マップの初期化処理が実行された時

この2つのパターンで共通で動く箇所に計算処理を入れればOKだ。

実は、各マップの初期化処理の中では
両方のパターンによる分岐処理が存在する。
となると各マップの初期化処理の最後に行えば良いことになる。

各マップの共通初期処理は、initMapXX_YYという名前の関数だ。
えーと、今のマップの数は
・プロローグで2
・試練の洞窟で9
・ボカロタウンで7
・ウータウの森で2
計20ソースを直すってことね。

┐(´д`)┌ヤレヤレ



って、そんなアホなことをするのはイヤだ!

なので、1箇所だけ直して乗り切ることにする。
ポイントは、main.cppのWinMain関数にある以下の場所だ。

■修正前


case GAME_MODE_GAME_INIT:
//********************************************
// ゲーム初期処理
//********************************************
initGame();
break;

initGame()は、各マップの共通初期処理関数initMapXX_YYの関数ポインタだ。
ということで、各マップの共通初期処理関数実行後というのは
initGame()実行後とイコールであるため
この後に計算を書けば良いってことになる。

■修正後


//********************************************
// ゲーム初期処理
//********************************************
initGame();
// 多重スクロール対応で左右の移動のみレイヤ毎にスクロールスピードを調整する
// レイヤ3のスクロールスピードを1.0とした時に
// 奥のレイヤほどスクロールが遅く(レイヤ1とレイヤ2)、
// 手前のレイヤはスクロールが速くする(レイヤ4)
g_current_field_pos_Layer1.x = g_current_field_pos.x * 0.5f;
g_current_field_pos_Layer2.x = g_current_field_pos.x * 0.75f;
g_current_field_pos_Layer4.x = g_current_field_pos.x * 1.5f;
break;

これで昨日の記事の動画の処理と同じ操作をしてみると
問題なく期待通りに多重スクロールしてくれた。

しかし、


// 多重スクロール対応で左右の移動のみレイヤ毎にスクロールスピードを調整する
// レイヤ3のスクロールスピードを1.0とした時に
// 奥のレイヤほどスクロールが遅く(レイヤ1とレイヤ2)、
// 手前のレイヤはスクロールが速くする(レイヤ4)
g_current_field_pos_Layer1.x = g_current_field_pos.x * 0.5f;
g_current_field_pos_Layer2.x = g_current_field_pos.x * 0.75f;
g_current_field_pos_Layer4.x = g_current_field_pos.x * 1.5f;

この部分だが、scrollToLeft関数とscrollToRight関数でも使っている。
3箇所目なので共通で使うに関数しておいた方が良いだろう。
そうすれば、レイヤごとのスクロールスピードの倍率を
その関数だけで管理することができる。

さて、次はどこを作ろうかな?
候補としては、
・ウータウの森入口のマップ画像描画を作る。
・ミクの攻撃スキルを作る。(今考えているのは2つの攻撃スキル)
・ブレイクオブジェクトの処理を作る
・ドロップアイテムの処理を作る
・ボカロタウンのマップ画像を作る(こいつは一気にはできないと思う)
・第1章のボスの画像をそろそろ作る
・未解決のバグを直す

といっても未解決バグの中には何度も調べているんだが
原因や解決策が分からないものがあるんだよなぁ・・・
特に初期の頃からあって分からないのが以下の4つだ。

・プロローグ最初のマップの下の坂から歩いて上ってきたときに、
 いきなり画面外に落下することがある

・足場に向かってジャンプすると勝手に更にジャンプすることがある
 特に坂に向かってジャンプする時に発生する
 どうやら坂にぶつかる時に
 左右への移動キーを押していると起きるみたい
 平らな足場でも似たようなので着地と同時に
 垂直ジャンプするってのもたまにあるな・・・

・ミクが動けなくなる不具合がいくつかあります。
 プロローグ最初のマップの最初の坂の上からスタート地点に
 戻ろうとした時にたまに、
 プロローグ2マップ目の中央の壁、
 第1章Xエレメンタルのいるマップの入り口付近など
 →原因は分かっているんだけど対処方法が分からない・・・

・坂に着地した後にミクがじわじわ上に上がっていく
 この時、OnTheGroundとnow_jumpingはともに1
 →この状態が一番面倒臭い気がする・・・

どうしたもんだろう?

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.07

初音ミク冒険記で多重スクロールを実装!(テスト動画付き)

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

悪魔城ドラキュラやAstlibraをやっていて
カッコイイな!
と思っていた多重スクロール。

奥行きが出てて良いじゃないか!
ということで実装してみた!

言葉での説明よりも実際に動画で見てもらった方が良いかな?
と思ったので無料のmp4プレーヤーを探したら
良さそうなのを発見!

AviUtilでテロップをつけて動画を作ってみた。
(右側に青い線があるのはキャプチャ範囲の指定をミスったためです)

動画を再生するには、videoタグをサポートしたブラウザが必要です。

さて、どうやって実装したかですが。

多重スクロールのポイントは
Astlibraのソースにコメントで書かれていた。

どうやら
プレイヤーよりも奥のレイヤ(階層)は、
奥に行くほどゆっくりスクロールし、
プレイヤーよりも手前のレイヤは、
手前に行くほどより速くスクロール
すれば良いらしい。

もともと初音ミク冒険記では
Astlibraのソースやマップエディタを参考にして
4階層にマップ画像を重ねてスクロールをしている。
(実際には他にも階層はあるんだけどマップ表示に限ると4階層なのだ)

  • 第1階層(レイヤ1):背景マップ画像
  • 第2階層(レイヤ2):背景マップ画像と
               ミクに合わせて動くマップ画像の中間の画像
  • 第3階層(レイヤ3):ミクに合わせて動くマップ画像
  • 第4階層(レイヤ4):ミクよりも手前で動くマップ画像

つまり、レイヤ3のスクロールスピードを1とした時に
レイヤ1、レイヤ2は遅く、レイヤ4は速くスクロールすれば良い。

このため、暫定的にスクロールスピードを以下のように設定する。

  • レイヤ1:レイヤ3の0.5倍
  • レイヤ2:レイヤ3の0.75倍
  • レイヤ3:スクロールの基準速度1.0倍
  • レイヤ4:レイヤ3の1.5倍

ここで初音ミク冒険記でスクロールに関わる変数たちを図解してみる。

Scrollkanren1

修正前


void scrollToLeft(float jikiposx){
//スクロール可能かをチェック
if ((int)jikiposx - SCROLL_LIMIT_LEFT_RIGHT > (int)g_stagesize.lefttop.x){
g_current_field_pos.x = jikiposx - SCROLL_LIMIT_LEFT_RIGHT;
g_framerect.lefttop.x = g_current_field_pos.x - MOVE_SIZE;
g_framerect.lefttop.y = g_current_field_pos.y - MOVE_SIZE;
g_framerect.rightbottom.x = g_current_field_pos.x + SCREEN_WIDTH + MOVE_SIZE;
g_framerect.rightbottom.y = g_current_field_pos.y + SCREEN_HEIGHT + MOVE_SIZE;
}
}

修正後


void scrollToLeft(float jikiposx){
//スクロール可能かをチェック
if ((int)jikiposx - SCROLL_LIMIT_LEFT_RIGHT > (int)g_stagesize.lefttop.x){
g_current_field_pos.x = jikiposx - SCROLL_LIMIT_LEFT_RIGHT;
// 多重スクロール対応で左右の移動のみレイヤ毎にスクロールスピードを調整する
// レイヤ3のスクロールスピードを1.0とした時に
// 奥のレイヤほどスクロールが遅く(レイヤ1とレイヤ2)、
// 手前のレイヤはスクロールが速くする(レイヤ4)
g_current_field_pos_Layer1.x = g_current_field_pos.x * 0.5f;
g_current_field_pos_Layer2.x = g_current_field_pos.x * 0.75f;
g_current_field_pos_Layer4.x = g_current_field_pos.x * 1.5f;
// 画面領域(当たり判定)の位置調整
g_framerect.lefttop.x = g_current_field_pos.x - MOVE_SIZE;
g_framerect.lefttop.y = g_current_field_pos.y - MOVE_SIZE;
g_framerect.rightbottom.x = g_current_field_pos.x + SCREEN_WIDTH + MOVE_SIZE;
g_framerect.rightbottom.y = g_current_field_pos.y + SCREEN_HEIGHT + MOVE_SIZE;
}
}

同様にscrollToRightも修正した。

次に問題となるのはデータ上の座標を
画面表示用座標に変換する関数である
XInViewとYInView関連

もともとのXInView関数


int XInView(float inx){
return (int)(inx - g_current_field_pos.x);
}

新しく作るXInViewL1関数


int XInViewL1(float inx){
return (int)(inx - g_current_field_pos_Layer1.x);
}

といった感じでレイヤ1用の関数名は最後にL1を
レイヤ2、レイヤ4用の関数名は
それぞれL2、L4をつけて作ってやる。
関数で使うg_current_field_pos_LayerXのXはレイヤ番号だ。

XInViewとYInViewはオーバーロード関数
(関数名が同じで違う型や違う数の引数を受け取る)にしているので
実際にはXInViewL1は引数がintのものとfloatのもの2種類を作成。

引数がintのXInViewL1関数


int XInViewL1(int inx){
return (inx - (int)g_current_field_pos_Layer1.x);
}

これでレイヤ1で画像描画で指定するx座標を
XInView関数→XInViewL1関数にすると良いんじゃない?

ということで動かしてみたのが先の動画の動きでした。

ここまではOKだ

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.06

Windows8の性能で気になること

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

インフル疑惑で出勤できないので
家のノートパソコンをいじっていたんだけど
Windows8が異様に遅い。
(クリーンインストールしデスクトップはあまり気にならなかった)

最初のデスクトップを起動するときが遅いのは
従来のWindowsのスタートアップが動くからなので
そこは仕方ないんだけど、特に気になっていたのが以下の2点

・スタートアッププログラム起動後も常にディスクアクセスをしている
・インターネットが異様に遅い

OSのバージョンが上がって遅くなるとか意味が分からない。
怪しいのはデバイスドライバ周りか?

グラフィック周りはWindows7のドライバの方が安定したりするらしいんだが
ネット周りはどうなんだろうね?

ちなみにインターネットの速度計測をすると



(・_・)エッ....?
古いWindowsXPのデスクトップの方が200~300倍早いだと!?

確かにノートパソコンをつないでいるLANケーブルは
カテゴリ5なので他の機器につながっているLANケーブルはカテゴリ7なので
他よりは遅いんだけど、さすがに200~300倍の差はありすぎだろ!
(実は、このノートパソコン、シールド付きのカテゴリ7だと速度が激減する)

ディスクアクセスについてはネットで調べたところ
IPv6プロトコルもしくは、以下のサービスが怪しいらしい。
Peer Networking Identity Manager
Peer Networking Grouping
Peer Name Resolution Protocol

IPv6は、ひとまずとめることにした。

実は上の3つのサービスは、全部、起動方法が手動になっているので
本来は、ユーザが意識的に起動しない限り
起動していてはいけないサービスである。

にも関わらず起動しているあたり、
Windows8のサービス周りが、うさんくさい気がする。ε-( ̄ヘ ̄)┌ ダミダコリャ…

しかも、上記のサービスを終了させようとして
依存性のあるサービスも一緒に終わらせるってのを選んでも
依存性のあるサービスPeer Name Resolution Protocolが
綺麗に終了しないと来た。

仕方ないのでサービスのスタートアッププロパティを無効にして
Windowsを再起動することに。

これで上記のサービスは起動しなくなったものの
それでも状況は改善せず。

そこでWindows Updateはどうなっているのか確認することに。

えーとWindows8ではWindows Updateは
コントロールパネルに移動したんだっけ。

むむ!
Windows Updateは自動でやる設定になっているはずなのに
重要な更新が29もあるだと!

もぅ、しょうがないなぁ、手動でアップデートしよう。

Windows Updateお得意の
再起動後にアップデートできるのが増えるというのを
繰り返しているうちに、ディスクアクセスが減ったので
(もしかしたらWindows Updateのダウンロードに時間がかかってたのかも)
回線速度を確認したところ、無事にXPと同じくらいの速度が確保できた。

ふぅ。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.05

ようやく熱が下がった

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

日曜の昼間に咳が出るなぁと思っていたら
夜になって急に熱が上がり始めたかげさんです。

日曜の夜と昨日は39度台の熱が出てて
関節痛やら寒気がするやらという症状だったので
もしやインフルかと思い
昨日はもともと予約していた朝一番からの皮膚科の診察が終わって
すぐに内科に向かった。

インフルエンザの検査の結果は
AもBもマイナスだったのだけど
医師からはインフルエンザと思って
処置しましょうとのこと。

つまり熱が下がって2日経つまでは
会社に行かないようにという指示を受け
タミフルと解熱剤、咳止めを処方されたわけだ。

薬の効果もあって
今日はかなり熱が下がったものの
咳が抜けない感じ。

咳がつくと薬を飲んでも中々治まらないのはいつものことなので
そこはあまり気にしていない。
平熱が35度台のかげさんにとっては
熱が下がるほうが重要だしねぇ。

過去のブログの記事を見ると
2009年にも似たようなことがあったみたいだ。

こういう自分の過去のことを調べるときに
ブログって役に立つなぁと思う。

みなさんも体調には気をつけてくださいね。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2013.02.03

今年も活躍、自宅周辺地図で恵方を確認するサイト

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

前に書いた「恵方巻き、ちゃんと恵方を向いて食べる方法」を参考に
今年の恵方をチェック!

分かるサイトはココです。
2013年(平成25年)の恵方

今年もちゃんと恵方を向いて食べれたぜぃ。

と、ここまでは良いが現在体温が38度を超えているだと・・・

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

« 2013年1月 | トップページ | 2013年3月 »