最新情報(固定記事)

※※※※※※※※※※※※※※※※※※※※※※
計画中!
★ルビーのスパイ作戦
カードバトルxアドベンチャー
製作の最新情報はCi-enにて!

発売中!
★えびげん、ターニャのラインディフェンス(NEW!)
★エヴァいじり
弄ってイかせよう。シミュレーションゲーム!
・キャッスルえびる登録情報ページ
・スーサイダー登録情報ページ
・スペルマスター登録情報
・パツィーノの幸せの鳥登録情報
・ミナーヴァ登録情報

・ダンジョンオブエロチックマスター発売中!(プログラム担当)
------------------------------------------------------------
★更新情報(2018/11/01)

※※※※※※※※※※※※※※※※※※※※※※
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

2014年3月23日日曜日

DataGridView

.NET Frameworkでちょっと難航したのでメモ。
DataGridViewは本当やっかい


■プログラミング

■.NET Framework

リサイズ関係は幾つも似たような物が有り、互いに干渉していてかなり意味不明。

○列幅を変更可能にする

ここ参照

AllowUserToResizeColumn=true
AutoSizeRowsMode=DataGridViewAutoSizeRowsMode.Fill
AutoSizeRowsModeをAllCellsにするとなぜか列幅をユーザが変更できなくなる。

ちなみにFillの場合列幅の自動調整が効かなくなるので…
dataGridView1.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);
とやって部分的に自動調整可能(幅がでかすぎるときなど)。

さらに、Fillだと横スクロールが出ない。
調べると、カラムのFrozenをfalseにする…
dataGridView1.Columns[i].Frozen = false;
とあったが、やはり出なかった。
この場合、カラムの幅をウィンドウ外までひっぱれない設定できない。


○ステータスバー

考え無しに下記のように配置すると…
・SplitContainer.Dock=Fill
・StatusStrip.Dock=Bottom
SplitContainerの下端がStatusStrip=ステータスバーの下に入り込んでしまう。
(横スクロールバーが隠れる)

で、対処策は1枚パネルを用意して、その上にSplitContainerを置けば良い。
仕様だろうけど、動作としては変。


○DataGridViewのクリア、登録

リストボックスと思ってやろうとすると上手く動かない。

・初期化(クリア):DataSourceを新しく用意した方が早い。カラムもその都度入れ直す。…
DataTable data = new DataTable();
data.Columns.Add("ID", Type.GetType("System.String"));
dataGridView1.dataSource = data;

こんな感じで。

・DataSourceとは?:テーブル=表の実体データ。Databaseを指定したりする。表示目的だけなら、DataTableをnewして使えば良い。

・情報の追加:
DataRow row = data.NewRow();
object[] obj = getRow();
row.ItemArray =  obj;
data.Rows.Add( row );

--
string[] getRow () {
 return {"データ","",""};
}

○チェックボックスを入れる

リストボックスのやり方とは違う模様。
カラム追加時に…
data.Columns.Add( "カラム名", typeof(bool));
とやっておき、データ挿入時に…
row.ItemArray[i]=true;
とかやればOK。

○一部の列だけ編集可能に。

全体をReadOnlyにすることは出来るが、一部だけ変えたい場合の手順。
まずDataGridViewはReadOnly=falseにしておく。
で、DataTable作成時に…
data.Columns[i].ReadOnly=true/false
とすればOK。
ちなみに、DataGridViewをReadOnly=falseにすると、DataTableが書き込み可能だろうと無効化される。分かりづらい。

○読み取り専用の列を編集する

例えプログラムからであろうと、ReadOnlyの列を弄ろうとすると例外が発生する。
なので、一旦ReadOnlyを外す。
具体的には…
DataTable dataTable = dataGridView1.DataSource as DataTable;
dataTable.Columns[(int)ColumnType.FILENAME].ReadOnly = false;
dataTable.Rows[nRowIndex][(int)ColumnType.FILENAME] = Path.GetFileName(strNewPath);
dataTable.Columns[(int)ColumnType.FILENAME].ReadOnly = true;
dataGridView1.UpdateCellValue( (int)ColumnType.FILENAME, nRowIndex );
…といった感じ。
as はキャストみたいなもので、…
DataTable dataTable = (DataTable)dataGridView1.DataSource;
…でも良い。

○アプリケーションのパスを得たい

strCurDirPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
はい。

2014年1月24日金曜日

うにち

大体うにちぃ

■プログラミング関係

■Unity

・GUIを回転・反転する

特にTextureの表示とかは重要。
やり方としてはGUIUtility.Rotate**やScale**を使うのがセオリーっぽい。

以下Scaleの話。

Pivotは文字通り反転の軸となる座標。
画面の座標(Group内ならGroup内座標)を指定する。
画像の左上が0,0とかではなく、あくまで絶対座標で指定する点に注意。
画像の表示位置がX,Y,W,Hである場合、その場で反転したいならPivot座標はVector2(X+W/2,Y+H/2)になる(Y軸反転=左右反転ならPivot.yはどうでもいい)

なお、変更した後のGUIも全部影響を受けるので、GUI.matrixを待避して戻すこと。

DrawTextureも奥が深いので、やりたい事が増えたらまた見ておこう。

・乱数

.NETなどの素のC#はRandom rnd = new Random();してNext**使うのだが、UnityはRandom.valuかRandom.Range(x,y)が定石っぽい。

上のURL先に書いてあるとおり:
intの場合はx<=値
になる点に注意。

・GUIMaker

セーブロードがクリップボードのみというトンデモだけど、$5にしてはそこそこ使える。定番中の定番NGUIは$75なので、しばらくはいいや。

問題点としては「改行を含むテキストを指定できない」という問題がある>GUIMaker
正確には「改行を含むラベルを含むGUIコードは、保存できるが読みこみ出来ない。」

どっちみち保存後手動でいじるので、GUIMakerで弄ってる間は適当な文字列で使うとか対応が必要っぽい。

■雑記

カス子MODで怒り眉を作った。
いた学の9番目のVoice+怒り表情がとても良かったので、その再現といったところ。
そしてまたネタは切れた。


これがSkyrim+SexLabFramework+SexLabDefeatの世界…!
本当はプレイヤーをおっさんにしてあれそれしたいんだけど、カワイイNPCが居ないんよね…。
フォロワーもいいんだけど、雑魚も可愛いのが良いなぁ。
NPC美化探してみよう。(敵NPCのは入れてるけど、髪が明るい紫になる問題が。)

ひろぴん

我々はこのモンスターを知っている!

蜂
実はドットで作ろうとしてたんだけど、量が多すぎて挫折してたのをリファインする形。
スライム、ローパー、蜂、人型と揃ったので、後は筋肉モリモリ、マッチョマンの変態を入れたら一通りおしまいかな(そして始まるモーション地獄)


2014年1月18日土曜日

ほぼ(風邪)引きかけました

ゆっくり一日寝たらなんとか復帰。

■プログラミングメモ

■Unity

色々ノウハウが貯まってきた(キリッ)。
と言うこともなく、とりあえず見知ったものだけ掲載。

・[Unity]Input.GetAxisを使った場合でもキーボード移動をキビキビ動かしたい

From.テラシュールウェアさん
うちはJumpキーの設定持って行ったので、Gravity=1000,Dead=0.001,Sensitivity=1000という極端なものになった。
これなんでデフォルトが慣性なのかというと、3Dゲーだとそっちのが自然だからってやつね。

あとアナログスティックも数値的な量を取得できるので、2Dでも要らんって事はない。見下ろし型とか。

関係無いけど、ジョイスティックだとアナログ以外の十字キーも数値的な量を持っている。
DirectXゲーム作成時は閾値(64)とか設定しないと、チャタリング(または押しっぱなし)するという問題が存在する。

・テキストファイルIO

セーブファイルをテキストでいいので用意したかったので調べた。
結論としては、Assetフォルダ外にファイルを設置する場合は、C#の普通のIO使った方式を調べた方が良い。

なぜかUnity関連のページはFileInfo.AppendText()使った用法くらいしか載ってないので、新規作成ではなく追記される。(そういう関数なんだから当たり前だが。)

C#本来の方法を使うと逆にGameObjectにコンポーネントとして登録できない問題がある。(MonoBehaviorを継承しないといけない)

ただ、MonoBehaviorを継承するとnewでの宣言が何故か出来なかった(方法が有るのかも知れないが、良くわからんかった)
MonoBehavior継承したクラスにC#本来のクラスを持たせれば動くので、二度手間だがとりあえず動いた。
(動けばよかろうなのだ-!)

Assetにあるテキストを読むだけならこっちの方法の方が良い。
MonoBehaviorでnew出来なかったのが良くわからんが、それが解決したらMonoBehavior使った方法に戻したいところ。

・非ActiveなGameObjectの参照

ようわからんが、シングルトン(アプリで唯一のインスタンス)ならGameObjectの参照をクラスに持たせて、Inspector上でD&D登録した方が早いってのは確実。

というか、探す方法が色々あるのは構わないけど、「何でも出来る」は「(ノウハウが無ければ)なんにもできない」なので、ある程度逆引きできると良いと思う。

Unity逆引き辞典とか良さそうじゃない?

αブレンドをスクリプトで変える方法とか、Prefabのインスタンス化とか色々

・セーブファイルの構造

いちいち.INIファイル形式とか自作フォーマットなんてやってらんないので、Json変換を流用するのが楽そう。
どうせ分かる人にはセーブ弄って貰うつもりなので、暗号化はやんない。
変換やObjectへの復帰もDLLがやってくれるので、Jsonとか知らなくても使える。

ただ、const stringが混ざってる状態で上手く変換出来なかったりするので、メンバ変数の型には注意。
 

・列挙子について

C++でもイマイチ上手く使いづらいEnumだが、C#やUnityだったらもう数値としての情報は切り捨てちゃっても構わんと思う。
単体で
public enum ***Type {
}
でもいいし、クラス内限定なら
public class Hoge {
  enum **Type {
    HOGER
  }
  **Type type;
  void Awake() {
    type = **Type.HOGER;
  }
}
とかでも良い。もちろん数値としての情報で管理も可能。

■Visual Studio

先週辺りからフリーズが連発していたが、原因はVisualStudioのデバッグモードと、ブックリーダー系の相性である可能性が高い。

MSのフォーラムでは結局「環境依存」で一蹴されていたが、…ってこれ前にも書いたな。
最近幾つか関連する原因があったので、アンインストールなど色々したら起きなくなった:

1.電子書籍リーダー系アプリ全般(system32\drivers\cymon.sysとかが怪しいらしい)
2.コンテキストメニューが多い

正直2番目はあんまり関係無さそうだし、大してコンテキストメニュー弄ってないのに直った。
やっぱり1番目の電子書籍系だなぁ。

■雑記

変身ヒロインとかSkyrimとか

赤城乳業:ドルチェTime・ティラミス
美味かった(小並感ステマ)ステマってスポンサー料貰って無くてもステマ扱いされるのが厄介
なんかサクサクしてて意外にティラミスしてた。
今日また買ってきた。


ちーん

意味不明なエラーが大量に…

スライム(パーツ化不可…!

ワーム的なアレ

もっちゅもっちゅ
モーションとか面倒なんですがこれは…
とりあえず要員は大分揃ってきたって感じかなぁ。
ワームは動かすの面倒なのでGomon専用。
 ニコ動でSkyrimの最大トーナメントが面白かった。
オブリとFallout3見たらまたやりたくなったが、オブリはやっぱり昔のゲームだと痛感してそっと閉じた(フリーズしたのでどっちにしろ落とすしかなかった)


2014年1月12日日曜日

Unity関連

まとまった情報があったので記載

■プログラミングメモ

■Unity

・ActionEvent

モーションの途中や最初、最後に追加すると、スクリプトの関数を呼び出すことができる。
例

こいつを使えば、「Nフレーム目にショットを出す」といったことがAnimationウィンドウだけで設定出来る。
ちなみに、ショットなど生成して消したりはPrefab化したものをInstantiateでインスタンス化するのが定石っぽい。
詳細はUnity2Dのチュートリアルプロジェクト(特にGun.cs)参照。
Rocket.csには自身を2秒で消す処理もあるので参考になる。(1秒未満にしたい場合はアニメーションとかUpdate()内でTime.deltaTimeとか使って手動でDestroy(gameObject)すればOK。)

3Dだがチュートリアルプロジェクトの「Stealth」も参考になるので見るべき。


なおActionEventに登録できる関数には、条件として「引数が0個、またはint,float.doubleいずれか1個のみ」がある。引数を2個以上設定したり、他の変数タイプを指定すると一覧に出てこない。
(エラーも出ないので、出ないときは引数などをチェック)

なお、2つめ以降のスクリプトの関数を指定していると(Function not supported)と出ることがあるが、一応呼ばれては居る模様。よく分からん。
関連スレッド


・GameObjectの表示の切り替え

服装の変更に表示切り替えを使っている。

ゲームオブジェクトの表示切り替えには、「RendererON/OFF」と、「Active/非Active切り替え」の二つの方法がある。

で、Recursiveに全部切り替えるのも良いが、一個一個切り替えたい場合もある。
その時はgameObject.SetActive()でOK。

で、現在有効(Active)かを知る方法は二つあり、activeSelfはそいつ自身のActive状態(true/false)がわかり、gameObject.activeInHiererchyは親が非Activeの場合は問答無用で非Active(false)になるといった調べ方ができる。
ヒエラルキーは何が嬉しいかというと、見えないgameObjectを弄る必要がなくなるという点。

Unity上では親が非Activeになると、子も全て非Active扱いであり表示されなくなる。
しかし、activeSelfだけだと親関係無くActive状態が取れてしまう。

ヒエラルキーを使う事で、親が非Activeな場合は子も全部非Activeとなり、そっとしておくことが出来る。

ちなみに、現在作っているゲームは服装/アーマー/下着と、それぞれの破損時/通常時の計6パターンある。
そのため、それぞれをタグ付けして、GameObject.FindObjectsWithTag()を使って一気に服装を取得する方法を取っている。

服装は頻繁に変えないので、処理的には問題無さそう。(大量の服Spriteを全部仕分けておく必要があるが。)


・疑似3D(ベルトアクションとか見下ろし用)

仮想地面を作ってみたが、他のキャラが普通に横方向でつっかえるので使えないことが判明。

とりあえず数値で仮想地面を超えないように設定。
とはいえ、今のところあまり上手く動いてない。なんとかならないか試し中。





2014年1月3日金曜日

2D IK

部屋のサイズ(それは2LDK)

■プログラミングメモ

■Unityで2D IK

とりあえずで開始したので$20以上する有料フレームワークは避ける予定。

2D IK Solution
$5だったので試しに導入。

なお画像サイズや相対座標が1Unit未満になると、途端に動作しなくなる(NaNになる)。
聞いた話ではこれはもうUnity側のバグっぽいので、PNG選択→Pixels Per Unitを100→10とかにして、読み込みを10倍にするしか無い。(これでも追随が甘かったりなんか怪しいが)

なんとなくそれっぽいモーションが出来たので良しとする。

一般的には、2D IKにはSmoothMovesを使うのが主流。らしい。

ここらへんノウハウが全てなので、一からやり始めるとなかなか大変。

■Unityでベルトアクション(疑似3D)

元々3Dが餅である餅屋=Unityだが、2DモードはZ軸が単なる描写順と化す。

よって、ベルトアクションとかで疑似3Dをやるには、「疑似Z」(と勝手に呼んでる)軸を自分で管理する必要がある模様。ぶっちゃけY軸。

これ自体はDXLib版で散々やった話なので問題は無いが、なんか腑に落ちない気分ではある。

ちなみに今考えてるやり方としては、足下に擬似的な当たり判定の足場を用意して、これをプレイヤーの横軸と疑似Z軸について移動させるというもの。(下画像)
実験中なのでもっと良い方法があるに違いない…。数値制御しても良いけど、せっかくUnityなのでUnityらしい方法でUnityる。
擬似的な足場(四角)と見た目の足場(奥)。疑似的な足場が無ければ当然奈落に落ちる。
本当は後ろの足場(斜めにしたペラ版)に乗せたいのだが、2DColliderと3DColliderは併用出来ないので無理。
また、本来のZ軸を動かしても、表示の前後関係が変わるだけで意味なし。

ちなみに「スプライトがIKではなく1枚絵単体(のアニメーション)」であれば、ペーパーマリオよろしく3D空間でやるのも良い。

IKを使うのはドラゴンズクラウンもそうだが、ドットでやってるのは少ない。もっと増えるべき。
とは言え、荒いドットは間接がすぐ崩れるので苦労する。

■Skyrim SexLab

1/2のFW更新に合わせて諸々も更新とか、正月から飛ばしとるなー。(褒め言葉)
早速ご相伴に預かる。

1/2に更新されたっぽいもの
・SexLab Framework 1.35
・SexLab Submit
・SexLab Submit belt( Submit + Devious devices)
・SexLab Devious devices

特にSubmitは1/2だけで2回更新されててた。
しかしSubmitは空中にすっとんだり固まったり延々ぬっぷされたり色々おかしい気が。

PornoさんとこのMODとかも入れてたら255到達した。
また服装MODとか外さないと…。

■雑記

モーションエディタを作ろうとしたけど、労力半端無い。その上Unityで良さそうなのあったので、これはもうUnityに移るっきゃない!

最後の勇姿。さよーならー
ということでUnity中。
びりびり
ドットでやろうとしてたときは、服装を合計6パターンずつ用意するハメになった。
パーツ式なら3パターンx6パターンで済むけど、ドットなら枚数分かけ算になる…(戦慄)
もうドットで動き作るのはこりごりですわ…。

2D IK Solver:32x32のドットを100 pix per unitで読み込むと数値がNaNになる。
1日かかってようやく原因判明。ツール系はノウハウが無いと辛い

サンプルはこんなにスムーズ

ぽいん

ぺたぁ
ぼいんに統一するけどペタンもあり也無し也


NINJA
野郎のドットは打ってて楽しくないので、中身が女の子だと思うようにします。

えびげんだと思った?

(IKは無理だ)

おぱんつ



2014年1月1日水曜日

新年

あけましておめでとうございます。
今年もよろしくお願いします。


■プログラミング関連

ページにまとめるの面倒だし、今後は「プログラミング」ラベルに統一していきます。

■MessageBox

DXLibでもwindows.hインクルードすれば使える。
変数名がWin32API独自でややこしいけど、下記くらいで覚えておけばOK。
int MessageBox( HWND①, char*②. const char*③, int④)

①:ウィンドウハンドル。DXLibは
HWND GetMainWindowHandle()
で取得可能。
②:本文
③:キャプション(ウィンドウのタイトルバーに出る文字)
④:フラグ

フラグと返り値については下記が詳しい(当然MSDNにも載ってる)
●Win32API(C言語)編 第5章 メッセージボックス

・MB_OK         :OKボタンのみ。(IDOK)
・MB_OKCANCEL    :IDOK,IDCANCEL
・MB_YESNO       :IDYES,IDNO
・MB_YESNOCANCEL :IDYES,IDNO,IDCANCEL

■GetFileNameダイアログのOSハングアップ問題

下記条件を満たすと、特定の環境ではほぼ100%OSハングアップする。
・デバッグビルドであること
・WinVista以降(「ドキュメントライブラリ」などの仮想フォルダがあるOS)
・初期フォルダを設定せずに実施=ドキュメントライブラリが開かれる


試していないが、「ドキュメントライブラリ」以外の仮想フォルダでもアカンかも知れない。(試したくもないが)

結論として、回避策は
「初期参照フォルダを必ず設定して、『仮想フォルダ』を参照しないようにする」
という方法が手っ取り早い。
設定方法は下記(Win32API)

ファイル選択の場合
フォルダ選択では発生しない。
一応、フォルダ選択の場合の初期フォルダ指定も調べたのでリンク掲載。
フォルダ選択の場合

一旦発生したOSハングアップは止められず、シェルがゆっくりと固まっていく。
(電源ボタンで落とすか、リセットボタンでリセットするしかない。)

問題はこれがどのマシンでも起こる問題では無いらしく、MSフォーラムでも「稀」で一蹴されていた。「有償サポート受けたら?」とか言ってたが、こんなことで有償サポートを受ける必要も無いJARO。


考えられる問題は下記が上げられていたが、イマイチ原因とは断定出来ない。
・シェル拡張の入れすぎ
・CypherTech系(認証制御系)(cymon.sys)

結局回避策(初期フォルダ指定)をして騙し騙し使う他無さそう。

なお、下記条件の場合は、いずれも発生しない。
・リリースビルド(通常のアプリケーションも同様)
・仮想フォルダの無いOS
・仮想フォルダ以外の通常フォルダ

仮想フォルダはVistaあたりから追加されたようだが、とあるプロジェクトでも別の問題が発生していた。
OSハングアップさせるくらいなら、せめてNGで返して終わるくらいはして欲しい。


■雑記

空飛ぶ象(Habok)
ローディングを画像に差し替えるMOD。
通常は3Dモデルを表示しているので、これにすることで(微妙に)軽くなる模様。
画像はHABOK神の荒ぶり(元々ネタだったが、MODが取り入れてしまった例)


まあ旗艦だし
しょうがないよね。
キス島ってクリア出来るの?
さでずむらしい

モーションエディタの道のりは長い

うーん

そしてまだドット完成してない問題
ヒロインはいいとしてモンスター打つの面倒い…


2013年3月24日日曜日

ねんどまつ

 あと5営業日です。

■プログラム
○VC2008のF1ヘルプ
VC2008はF1でヘルプが出るんですが、これって終了してもプロセスが残るんですよね。

タスクマネージャを起動して「dexplorer.exe」をKILLするしかなさげ。

■えび2
調整中

LavaWormは完成しました。炎の星はもうそろそろ公開できるか…も…

ぴょん

ぴょんぴょん



■カスタム少女MOD
MOD作ったのでうpった
・拘束MOD(頭アリ)
・破損服




■その他

ハッ!



2013年3月20日水曜日

■プログラム
照準が動かなくておかしいと思ったら
const int SPD = 0.5f;
とかやってました。そりゃうごかんわ。
ちゃんと警告も全部潰しましょう(自戒


2012年9月28日金曜日

■プログラミング
intだかfloatだかを無視して代入すると、切り捨てられるだの何だのといった警告が大量に出る。
数が少なければつぶすべきだし、まれに数学的な理由で本当に問題になることも有る(例えば、切り捨ててしまったがためにZeroDivisionしたり計算が狂ったり)

しかし、99%不要なメッセージなので、表示しないようにするというのも手です。

http://www.c3.club.kyutech.ac.jp/gamewiki/index.php?pragma
 
下記を適当なヘッダに書けばOK。 
#pragma warning(disable:4244)
 
■えび2
特定のショットで弾が見えなくなる妙な現象が発生。
原因はコピペミスで残ったbreak一文でした。

・修正した箇所をdiffで調べる/思い出す
・怪しいところをはすして実行してみる
・トレースしてみる 

ここまでがんばってようやく見つけました…。

続きは返信