トップページgamedev
1001コメント353KB

C/C++ゲーム製作総合スレッド Part4

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2013/08/12(月) NY:AN:NY.ANID:RPqvnGkC
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
DXライブラリ 総合スレッド その12
http://toro.2ch.net/test/read.cgi/gamedev/1330000532/

前スレ
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/
C/C++ゲーム製作総合スレッド Part2
http://toro.2ch.net/test/read.cgi/gamedev/1351015269/
C/C++ゲーム製作総合スレッド Part3
http://toro.2ch.net/test/read.cgi/gamedev/1357899040/
0497名前は開発中のものです。2013/10/20(日) 14:43:39.43ID:0ur5LLqt
>>496
なるほど、よく解かりました

誤差レベルでも処理が速くなってることには間違いないわけですね
私は簡単なコードは1行でまとめた方がスッキリして見やすいと思うので
簡単なコードの場合は中カッコは使わないようにしています

http://c-games.main.jp/ckaihatu/ckaihatu6.html
例えば、このページの最後のコードのif文を
全て中カッコにすると縦に長いコードになると
かえって読みにくくなりますよね
0498名前は開発中のものです。2013/10/20(日) 14:43:43.89ID:qTgVZt4b
アホなことを言う前に、
出力されたアセンブラのコードを見てみろ
いかに間抜けなことを言っていたか分かるから
0499名前は開発中のものです。2013/10/20(日) 14:46:47.71ID:0ur5LLqt
ああ、このコードのことです

http://c-games.main.jp/img/ckai/ckaiE8.png

さて、そろそろタイトルロゴ表示の解説でも書こうかな
拡大とフェードインを同時に処理なので
3Dモデルで実装することにしよう

2D素材だと拡大がちょっとややこしいんだよね
3Dモデルならz座標をいじるだけで済むし・・・

ではまたね
0500名前は開発中のものです。2013/10/20(日) 15:13:31.51ID:5a9ZrG2U
まずそのif文が大量に並んだクソみたいなコードをなんとかすることを考えろ
0501名前は開発中のものです。2013/10/20(日) 15:13:38.47ID:0ur5LLqt
ところでどんなミニゲームを作ろうかと
ずっと悩んでいたのですが
ようやく決まった

ミニゲーム第一弾はスロットゲームにしよう
パチスロ仕様なスロットにしてボタンを押して絵柄を揃えたら
絵柄の種類によってお金をゲットするというものです

で、400G以上ゲット出来たらミニゲーム2が出現する
そしてミニゲーム2の内容はUFOキャッチャーにしてみよう
プレイヤーがゲットした人形がプレイヤーの分身になってゲームをプレイしていく

さらに、ミニゲーム3の出現条件は、ミニゲーム2で1つ以上人形をゲットにします
つまり、ミニゲーム2で人形をゲットできなければ
またミニゲーム1に戻ってお金を貯めないといけない

で、ミニゲーム3はマウスを使ったハエ叩きゲームでもしようかな
0502名前は開発中のものです。2013/10/20(日) 15:15:41.32ID:0ur5LLqt
>>500
いやです
0503名前は開発中のものです。2013/10/20(日) 15:26:34.56ID:CCOva6nt
また一人で語り始めたよ。
そろそろブログ消去かな。
0504名前は開発中のものです。2013/10/20(日) 15:47:46.42ID:m5Iqtrsb
>>482>>488>>493>>496>>498>>500
わざわざ相手するからだよ
どんなに紳士的に且つ真剣に間違いを指摘したところでそれを間違いと認めず
自身の学んだものが何より一番正しいと思い込んで一方的に語りたいだけだから
何言っても無駄。

わざわざレスしたものなら自分語りするための餌を与えるだけだから無視するに限る。
0505名前は開発中のものです。2013/10/20(日) 15:52:59.02ID:VrtyArlJ
kazukiって書いとけばレス来ないんだろ
天安門みたいだな
0506名前は開発中のものです。2013/10/20(日) 16:05:10.56ID:0ur5LLqt
>>503
C/C++でのゲーム製作のスレなのに
誰一人、ゲーム製作の話題を出さない方が異常かと思う
というか、ゲーム製作の話題がないと面白くない

このスレに訪れる人はゲーム製作の話題を期待して来ている

そして私は現在進行形でC/C++によるゲーム開発中
きっと、そんな彼のサイトに行けば
色んなゲームの作り方を盗めると思う

http://c-games.main.jp/

もう今は、ここでは多くは語らない
気が向いた時に一言二言発言するだけに留めている

実はデブだったストーカー君には目もくれない
0507名前は開発中のものです。2013/10/20(日) 16:26:25.08ID:H1a6UBHV
ポーカーでメダルを稼ぐ

高レート勝負が解禁されるのでもっと稼ぐ

伝説のディーラーが現れる

去年ツクールでやってたのとたいして発想が変わってないな

kazuki
0508名前は開発中のものです。2013/10/20(日) 16:32:42.27ID:VwrzDutR
上のほうでゲーム製作の話もいろいろ出てるのに一体どのスレのことを言ってるんだろうな

kazuki
0509名前は開発中のものです。2013/10/20(日) 16:33:21.63ID:m5Iqtrsb
スレを一番に荒らそうとしている奴が
正常なスレ進行を望むとかwww

kazuki
0510名前は開発中のものです。2013/10/20(日) 16:37:09.63ID:xi56AEFM
>色んなゲームの作り方を盗める
ゲーム制作じゃなくてc++によるアニメーション作成しかしてないじゃん…

kazuki
0511名前は開発中のものです。2013/10/20(日) 16:43:10.23ID:6V21KIB0
まったく成長してないな
いったい何を職業訓練で学んできたのか

kazuki
0512名前は開発中のものです。2013/10/20(日) 16:48:47.75ID:VrtyArlJ
講座の前にゲームの一つでも公開したほうがいいんじゃね
つくったことない人間がつくりかた語るのって滑稽だろ

kazuki
0513名前は開発中のものです。2013/10/20(日) 16:48:57.63ID:0ur5LLqt
私が作るスロットゲームはただのスロットではないよ

リーチアクションでプレイヤーを興奮させたい(台を派手に光らせる)し、
最後の絵柄は1コマずつ回転して
惜しいところになるとゆっくり回転し
絵柄が過ぎたと思ったら、最後に逆戻りして絵柄が揃って
パンパカパーン!と(笑)

UFOキャッチャーでは、
本物のUFOキャッチャーみたいに
クレーンで人形を釣り上げているのに
僅かな振動で落ちてしまったりと、面白要素満載にしてみたい

ちなみに各ミニゲームは4ステージまであり
UFOキャッチャーは1ゲーム100G必要
なので、400G以上持ってないと遊べない
0514名前は開発中のものです。2013/10/20(日) 16:55:43.90ID:0ur5LLqt
ちなみにUFOキャッチャーで釣り上げた人形がプレイヤーの分身になるのだが、
複数の人形をゲットすれば、
プレイヤーキャラをいつでも変更が可能になる

で、別のミニゲームでスーパーマリオのようなゲームを用意する
選択した人形によって、走るスピードやジャンプ力が異なったりして
ゲームを有利に展開することも出来る

さらに、別のミニゲームでもっとお金を稼がせるゲームを用意し
そのお金を使って車を購入して、3Dレースゲームにもなる

車種は複数あり値段によって能力も違う
部品を購入して車のカスタマイズも可能

さらに宇宙船を購入してシューティングゲームにも発展させて
どこかの星に到着すると、ミニRPGに発展(笑)

まあ、ゲームを面白くする要素を色々考えています。
お楽しみに
0515名前は開発中のものです。2013/10/20(日) 17:04:40.36ID:rlFq2/3M
>>500
なんか俺もこんな感じになってるわ
もうちょっと単純な分岐だけど

移動操作に、入力されたキーに応じて特定の法則で値を入れると、8方向の分岐判定ができるって
過去にこの手のスレで騒いだんだけど見づらくなるからif文にしろと一喝されてな・・・
0516名前は開発中のものです。2013/10/20(日) 17:06:20.16ID:rlFq2/3M
◯値を入れると
×値を加算していくと
0517名前は開発中のものです。2013/10/20(日) 17:15:31.41ID:CLSVpEEJ
みんな暇そうなので質問
効果音,画像,モデルのロードや管理はどうやってる?
モデル、画像は単体で存在できないから物クラス板クラスをnewするときに持たせたりロードさせてるんだけど、
効果音の管理がうまくできない
今システム音は一括起動ロード、ゲーム内の音は音を出す物体に持たせてる
でもバラバラになりやすくて困る
0518名前は開発中のものです。2013/10/20(日) 17:30:33.91ID:0ur5LLqt
>>515
8方向移動のコードですか
ちょっと考えてみました

//移動
void Idou(){
if( 上ボタン ) y--;
if( 下ボタン ) y++;
if( 左ボタン ) x--;
if( 右ボタン ) x++;
if( 上ボタン && 右上ボタン ) y-- , x++;
if( 上ボタン && 左上ボタン ) y-- , x--;
if( 下ボタン && 右下ボタン ) y++ , x++;
if( 下ボタン && 左下ボタン ) y++ , x--;
}

//エラー
void Idou_E(){
if( 上ボタン && 下ボタン );
if( 右ボタン && 左ボタン );
}

こんな感じの2つの関数を作って2つとも呼び出せばいいのかな?
0519名前は開発中のものです。2013/10/20(日) 17:35:02.87ID:0ur5LLqt
>>517
http://c-games.main.jp/ckaihatu/ckaihatu7.html

俺はこんな感じにインストラクタで一括で読み込み
メンバ関数内でメンバ変数を呼び出して使用

他の方どうぞ
0520名前は開発中のものです。2013/10/20(日) 17:41:16.55ID:0ur5LLqt
間違った(笑)
こうかな?

//移動
void Idou(){
if( 上ボタン ) y--;
if( 下ボタン ) y++;
if( 左ボタン ) x--;
if( 右ボタン ) x++;
if( 上ボタン && 右ボタン ) y-- , x++;
if( 上ボタン && 左ボタン ) y-- , x--;
if( 下ボタン && 右ボタン ) y++ , x++;
if( 下ボタン && 左ボタン ) y++ , x--;
}

まあキャラクターを移動するところになったら
もっとじっくり考えてみよう
0521名前は開発中のものです。2013/10/20(日) 17:43:24.26ID:KGuhRKDR
このスレで聞くよりなんでも掲示板行った方がいいぞw
0522名前は開発中のものです。2013/10/20(日) 17:47:01.59ID:TSQ7+MLu
>>515
さすがに移動処理をまとめるのはないわ
それを言われてifだらけにするのもないわ

例えばAジャンプB加速C攻撃Dガードだとまとめることは不可能
同じキー処理なのにあっちではfor、こっちではifとか見にくいからifで統一すべきってこと
移動量なんかよりキー処理の方が大きい存在だから移動量側の都合に合わせたらあかん
0523名前は開発中のものです。2013/10/20(日) 18:04:48.98ID:5a9ZrG2U
効果音って結構使い回すからグローバルクラス作って全部押し込んでるな
よくないんだろうけど
0524名前は開発中のものです。2013/10/20(日) 18:14:32.71ID:TUni1VW8
>>520
Windowsから送られるメッセージを処理するで絶対間違いないって
なんならDXライブラリ作った人に掲示板で聞いてきてあげようか?
0525名前は開発中のものです。2013/10/20(日) 18:27:55.76ID:tZaAXPVJ
>>517
俺も>>523みたいな感じだな。マネージャクラスを作ってデータの実体はそこで一元管理してる。
ロードは各シーンに移ったタイミングで使うファイルを指定して全て一括ロード。
動的なロード/アンロードみたいなことはしてない。

古典的で単純な設計だけど、変に工夫しても複雑化するばっかで使いづらいだけだったので結局コレに落ち着いた。
今やメモリ2Gがゴミスペックって時代だし、個人レベルで作れる規模のゲームならリソースの容量的にもロード時間やメモリ残量がネックになることはないと思うし。
高度なリソース管理システムがないと管理不能な程リソース数があるわけでもなし。
なので、重複ロードだけ防げればいいかなって考え。
0526名前は開発中のものです。2013/10/20(日) 20:58:42.50ID:IiFjB0r4
よく使う(かもしれない)リソースはキャッシュしている

使っている間はリソースが解放されないようにさえしておけば
キャッシュの最大容量を減らすだけで低メモリ環境に対応できる
メモリが十分あるなら最大容量を多めにしてロード時間を削減できる

バッググラウンドで次使うデータをロードし続けると、更にロード時間削減するのに良いが流石にこれは難しい
0527名前は開発中のものです。2013/10/20(日) 21:53:23.68ID:nyJspEC4
解説サイト作るならdoom3やquake3のソースを丁寧に解説してくれれば
すんげー便利なんだが…、まぁ読むのがめんどくさいだけなんだがな(´д`;)
0528名前は開発中のものです。2013/10/20(日) 22:32:36.98ID:TSQ7+MLu
グローバル管理はきついからなぁ…
キャッシュ機能追加してみよう
0529名前は開発中のものです。2013/10/20(日) 22:56:51.42ID:5jHWN8P9
ボクは移動とかのキー入力に関しては携帯ゲーム機のキーコードを参考にビットで演算してる
ぶっちゃけそんなに使うキーも無いし特定のボタンを特定のビットに対応させてtrueとfalseで、判定させたい時に&で比較して押されてるか確認する

改行多いって言われたから連投する
画像のロードはたぶん誰かがすでに手法の公開とかしてると思うけど
res.h
#pragma once
#include <string>

namespace res {
namespace ID {
enum {
NONE = 0,
TEST_1,
TEST_2,
MAX
};
}

const std::string FILE_NAME[ID::MAX] {
//NONE用
"",
"res/test_1",
"res/test_2"
}

static int FileReadCount[ID::MAX] = {0};

std::string LoadFile(const int ID);

bool UnLoadFile(const int ID);
}
0530名前は開発中のものです。2013/10/20(日) 22:57:24.68ID:5jHWN8P9
res.cpp
#include "res.h"
std::string res::LoadFile(const int ID) {
res::FileReadCount++;
return res::FILE_NAME[ID]
}

bool res::UnLoadFile(const int ID) {
res::FileReadCount--;
if(res::FileReadCount <= 0) {
return true;
}
return false;
}

すまんかなり見辛いな
ヘッダーとcppソースファイルの両方使ってる

それと外部テキストファイルに書き出してそのシーンで使うと思われるのを全てコンストラクタでそのシーン用のリソースが書いてある外部テキストファイルからロードして、デストラクタ時にそのファイルを全て破棄するってのもやってた
けど、前述のソース載せてる方の方が使いやすくて結局そっちだけしか使ってない

今は、今のシーンと次のシーンで同じファイルを使うなら使うファイルだけ破棄しないで使わないファイルは破棄して移行するってのを作ってる
0531名前は開発中のものです。2013/10/21(月) 07:52:17.59ID:wANeExEF
これ見てちょっとオサレな多機能マネージャー思い付いたかもしれん
既存のと組み合わせて頑張ってみる
0532名前は開発中のものです。2013/10/22(火) 01:16:32.21ID:qHDmg+Zc
クラスでprivate宣言するものは全てcppファイルに書くのってどうなんだろう?
0533名前は開発中のものです。2013/10/22(火) 06:39:40.68ID:ExrKC0WT
hに書いた方がいいんじゃね
cppをいじる時にパッとタブ切り替えた時にメンバ一覧として分かり易いしその程度だけど
0534名前は開発中のものです。2013/10/22(火) 07:16:23.97ID:oFXCBPaS
メンバ定義をヘッダに書くとヘッダの依存関係がな…
実装の隠蔽とか以前に結局pimplとか使わんと作業上の支障が出てしまう。
0535名前は開発中のものです。2013/10/22(火) 15:19:36.10ID:+qTS1YgK
>>534
boostさんをディスんなyo!
0536名前は開発中のものです。2013/10/22(火) 16:18:08.16ID:oKt5RaZ2
そういえば、ヘッダでメンバ定義する時の話だけど
メンバに、あるインターフェースクラスのポインタを持たせるときって
@インターフェースのヘッダをインクルードする?
Aそれともインターフェースの型を前方宣言する?

もちろん、相互に参照しなきゃいけないときは、片方はAを強制される場合もあるけど
0537名前は開発中のものです。2013/10/22(火) 17:23:07.33ID:Hu98QIBo
テンプレートにする
0538名前は開発中のものです。2013/10/22(火) 18:00:19.46ID:ZgWiXBx7
>>536
ハーブサッターはAって言ってたな(gotwの7番、理由はコンパイル時間)
俺はよくヘッダ間のinclude関係忘れるからcpp側でも全部includeするけど
STLとかベンダでまちまちらしいし
0539名前は開発中のものです。2013/10/23(水) 23:23:36.36ID:lFn9LRyC
>>520
それだと複数のボタンが同時に押されている場合、効果が相殺されてしまう
例えば上ボタンと下ボタンの両方が押されていると
y--した後に、y++するのでy座標はじっとしたままになる
2行目以降はifではなく、else ifにした方がいいよ
0540名前は開発中のものです。2013/10/24(木) 00:30:32.21ID:BVtLeqeM
>>539
上下同時押しの時に相殺された方がいいかどちらかが優先された方がいいかは好みの問題じゃない?
それより斜め移動の速度が2の平方根の二倍になってるほうが問題あるだろ

ネタにマジレスしてしまったのだろうか
0541名前は開発中のものです。2013/10/24(木) 00:55:05.09ID:1hhrwRIp
まっすぐよりジグザグ移動の方が速いゲームが確かあったな
0542名前は開発中のものです。2013/10/24(木) 01:05:12.14ID:vQRNGmRF
0.9899って地味にいい数値だよな
0543名前は開発中のものです。2013/10/24(木) 05:23:32.15ID:SKhb4znW
飛行機にしろ自動車にしろ全方位に等速で動けると考える方がおかしい。
結局作りたいものによる。
0544名前は開発中のものです。2013/10/24(木) 07:07:41.21ID:vgxDEvxF
縦横と斜めで三倍の差というのは流石に開きすぎとも思ったけど、クォータービューだと良いのかもな
0545名前は開発中のものです。2013/10/24(木) 09:00:36.97ID:PzLm+IDY
マリオ系のアクションは左右と上下分割した方が扱いやすいし、シレン系とかのマス移動なんかは斜めの速度なんて考慮する必要ないし、
まぁケースバイケースか
0546名前は開発中のものです。2013/10/24(木) 10:10:01.88ID:lxEo0VYB
>>520
これ、例えば環境具体的にして、winならば GetAsyncKeyState 使う等して、要は「その時のキーの状態を見る」って前提があれば
8方向移動でも2行で終わるし、

そうでない場合でも必要なキーがわかってるなら、前提としてこの関数呼び出す時点で複数のキー状態わかるようにしとけば
こうはならないかなと
0547名前は開発中のものです。2013/10/24(木) 10:33:48.39ID:uLBv2hzm
4行ベタがき安定っすわ
マス型じゃなければ大なり小なりキー処理とは別の移動衝突判定作るだろうし
移動量を加算しておくだけ。
0548名前は開発中のものです。2013/10/24(木) 14:33:17.42ID:XeWeKceC
16要素のベクトルの配列用意してそこから引くってのはどうだろ
斜め移動の時の正規化の手間が一度ですむ
int index = 上ボタン | (下ボタン << 1) | (左ボタン << 2) | (右ボタン << 3);
const VECTOR &amp;v = ARROW_VECTORS[index];
0549名前は開発中のものです。2013/10/24(木) 16:57:55.12ID:ImWflR8K
>>548
vectorと言うかbitでそれ表して同じ流れってのは昔からある方法
0550名前は開発中のものです。2013/10/24(木) 16:59:12.34ID:ImWflR8K
あ、ごめんちゃんと見てなかった
>>548 で合ってる。それ昔からある方法の一つ。キー入力に限らず。
0551名前は開発中のものです。2013/10/24(木) 17:32:47.33ID:BIU10uO4
8方向ってテンキー対応方式で数値化してると、実方向(ベクトルとか)との
互換が案外面倒なんだよねえ

1~9という数値に、数学のベクトル的なセマンティクス持たせるのが難しいから
専用のゴリ変換マッピングをしなければならないという
0552名前は開発中のものです。2013/10/24(木) 17:56:17.80ID:vgxDEvxF
3の商と余りでうんたらって奴?
0553名前は開発中のものです。2013/10/24(木) 18:16:10.12ID:FZTpGVKH
>>548が何が起きているのかまるでわからない
0554名前は開発中のものです。2013/10/24(木) 18:16:35.21ID:ImWflR8K
>>551
どんなの想像してるかアレだけど、正規化された二軸のベクトルと思えばそんな大変でも無いと思うけど
0555名前は開発中のものです。2013/10/24(木) 18:18:01.30ID:ImWflR8K
>>553
例えば4ビットそれぞれに意味を持たせて、それで得られる16通り分の定数を配列から拾ってるだけ
0556名前は開発中のものです。2013/10/24(木) 18:23:07.69ID:ImWflR8K
byte k=0;
k |= 上?8:0;
k |=下?4:0;
k |= 左?2:0;
k |= 右?1:0;
で、kには0から15の16通りの値が決まるから、
配列に方向値の構造体とか予め入れておいて取り出すのような。
0557名前は開発中のものです。2013/10/24(木) 18:27:35.86ID:Rg5/XFmo
一度作った後は使い回すだけだと思うけど
いろいろ考えるんだなw
0558名前は開発中のものです。2013/10/24(木) 18:49:05.84ID:FZTpGVKH
うーんそれを使うと
if( 上ボタン ) y--;

if( 定数==上 ) y--;
みたいな感じになるの?
0559名前は開発中のものです。2013/10/24(木) 19:25:19.00ID:euKSvHth
>>558
ifすら使わない
関数ポインタの配列でおk
0560名前は開発中のものです。2013/10/24(木) 19:29:40.79ID:euKSvHth
というか、何でもかんでもifをアホみたいに並べるのは某バカkだけでおなか一杯
0561名前は開発中のものです。2013/10/24(木) 19:40:35.94ID:xcrne0fV
普段そのやり方でやってる人って押してから20カウントごとに移動(選択肢移動みたいなの)とかどう拡張してんの
0562名前は開発中のものです。2013/10/24(木) 19:42:29.47ID:FZTpGVKH
関数_上 y--
関数_右 x++
関数_上右 y--;x++
みたいなのを作って関数ポインタ配列に入れて
関数ポインタ配列「キー入力値」
みたいな感じでアクセスするのか。なるほど
0563名前は開発中のものです。2013/10/24(木) 19:42:49.17ID:IxTrXF7e
swichで定数で飛ばせば最適化がうまく働くんじゃないかね
でも使うのって秒間60回前後だろうし分かり易ければ何でもいいようなと思う反面
どうせベンチに現れない誤差でしかないのに
テーブルだとキャッシュ汚染するんじゃないだろうかと心配もしてしまう貧乏性が情けないわ
0564名前は開発中のものです。2013/10/24(木) 19:56:12.67ID:euKSvHth
>>561
キーリピートのこと?
0565名前は開発中のものです。2013/10/24(木) 20:05:28.77ID:lxEo0VYB
>>564
そう。
俺はif(keycount[num]%20==1)
みたいな感じでやってるけど
最初からカウントするなら利点消してそうだし
>>563のスイッチだと見にくくなりそう
0566名前は開発中のものです。2013/10/24(木) 21:13:20.89ID:yWybbfK/
vsync固定しないやり方でキーリピートってどうやんの
0567名前は開発中のものです。2013/10/24(木) 21:18:52.98ID:ImWflR8K
vsync関係ないと思うが
0568名前は開発中のものです。2013/10/24(木) 21:25:16.84ID:yWybbfK/
いや、下記のようにやって
キーリピートのカウンターが60になってたら1秒経過したことにしたりするんでしょ
vsync待ちしないで全速力でぶん回してたらカウンターが60になってても1秒経過したことにならないよね

while(1)
{
  checkKey();
  calc();
  draw();
  flip();
  waitVsync();
}
0569名前は開発中のものです。2013/10/24(木) 21:42:18.44ID:ImWflR8K
普通そういう処理って、システムが持ってるタイマー利用して経過時間見るよ。環境によっては無いかも知れないが。
winで言うと、QueryPerformanceほげほげ系の関数
0570名前は開発中のものです。2013/10/24(木) 21:48:58.06ID:euKSvHth
>>565
リピートはねー、俺の場合はそこで実装してないんだよね
キーボードとジョイスティックを管理するクラスでやってるので
リピート付きの取得関数と無しの関数をもってて
受け取る側はリピートのこと考えなくていい
0571名前は開発中のものです。2013/10/24(木) 21:49:20.44ID:BIU10uO4
>>552
それなりに工夫のしようはあると思うけど
たとえば、「9の逆方向」とかがアルゴリズムで処理しにくいよねってこと

あ、いや、まぁ、逆方向なら 10 - 値 でいいんだけど、
左右反転とか斜め反転とか、ゲームだといろいろとそういう数学的な処理が
必要になってくると思うから、ベクトルと相互変換できるのセマンティクス無視の
ゴリマッピングメソッドは用意しておいた方がやりやすいよねってこと
0572名前は開発中のものです。2013/10/24(木) 21:59:29.58ID:FZTpGVKH
流れで聞くけど「入力された瞬間」と「押しっぱなし」で動きを変えたいときははどう処理するんだろう
各キー毎に押しっぱなし処理があるから全部に関数_上押しっぱとか作ってられないし…
0573名前は開発中のものです。2013/10/24(木) 22:07:04.97ID:ImWflR8K
>>572
俺が昔実装した方法で言うと、入力ハンドリングの処理はキーの状態変化とその経過時間をFIFOキューに溜めていくだけにして、
入力に対して何か行動する処理はキューから結果をもらうって方法を取った。

短い時間の押し具合と、長押しや押しっぱなしの判断は、キューから取得したステートで判断てかんじ。

ポイントは経過時間(要件的には時計で言う時間でなくても良い、メインループの経過カウンタでも良い)で判定って所。
0574名前は開発中のものです。2013/10/24(木) 22:15:34.16ID:euKSvHth
>>572
いろいろやり方あるけど俺はダブルバッファリング派
前回と今回が違う値だったら押した瞬間
0575名前は開発中のものです。2013/10/24(木) 22:44:08.63ID:FZTpGVKH
あぁ押した瞬間とかの識別方法の話しじゃないんだ。処理を変える方法というか…

キー入力関数ポインタ[16]={関数_上,関数_下,…}
さっき上で話してたやつ。こんなのがあるとして

関数_上()

 if(押しっぱ)
 {
 }else
 {}

みたいなことしてたら全部のキー関数でif文しないといけないじゃない?
そこで「関数_上押しっぱ」みたいなのを作りたいんだけど
そうするとキー入力関数ポインタじゃアクセスできなくなる…

どういう感じに判別して処理を変えればスマートだろうか
0576名前は開発中のものです。2013/10/24(木) 22:55:12.21ID:ddNDzrdz
ボタンの押下状態を取得する関数に、
引数で「その瞬間のみ」というフラグを立てれるようにしてる。

キーリピートや、10フレーム以上押しっぱなしで真にする、とかも同じような感じで取れる
0577名前は開発中のものです。2013/10/24(木) 22:58:26.75ID:euKSvHth
>>575
やりたいことによって違うので、それだけの情報じゃ何とも言えんが例えば

if(押しっぱ) おしっぱ関数ポインタ[キー入力値];
else おした瞬間関数ポインタ[キー入力値];

とか?
0578名前は開発中のものです。2013/10/24(木) 23:09:59.81ID:FZTpGVKH
>>577
それだと「上をおしっぱの状態で右が初めて押された時」とかができないんだよね
そんなの使う時あるの?って聞かれたらなんとも言えないけど…
0579名前は開発中のものです。2013/10/24(木) 23:13:14.62ID:euKSvHth
>>578
コマンド入力だな
それなら>>573のやり方がいい
0580名前は開発中のものです。2013/10/24(木) 23:13:24.13ID:yWybbfK/
押されてたらカウンタをインクリメントしていって
カウンタが1だったら始めて押されてたことにすればいいんじゃ
0581名前は開発中のものです。2013/10/24(木) 23:18:48.87ID:euKSvHth
>>580
単純ならそれでいいが、複雑な処理になると死ねる
格闘系のコマンド入力を例にすると
間に変なキーが挟まっても処理できるように、履歴を参照できないとキツイ
0582名前は開発中のものです。2013/10/24(木) 23:41:07.44ID:ddNDzrdz
ああ、そういうことか。
それなら自分が前にやったのは、>573とだいたい同じっぽい。
0583名前は開発中のものです。2013/10/25(金) 01:10:12.99ID:EGV5trEu
俺は格闘コマンドは入力部分はいじらずに入力を監視するオートマトン用意してるな
受理したら発動みたいな
0584名前は開発中のものです。2013/10/25(金) 02:46:25.90ID:Wzto7AEP
入力履歴はそのまま記録すればリプレイにも使えるしデバッグにも利用できる。
0585名前は開発中のものです。2013/10/25(金) 09:05:50.59ID:FRzjSMWK
>>583
その監視側が履歴を必要とするはずだから、多分それは遠回りな実装。
具体的にコードパス説明してみ
0586名前は開発中のものです。2013/10/25(金) 11:25:43.16ID:U8abS4cv
テンプレートとautoってどう使い分けんの?
0587名前は開発中のものです。2013/10/25(金) 11:58:14.26ID:t+n4YTsO
>>586
使い分けるも何もテンプレートとautoは全く別
std::vector< std::map<std::string, int> > map_vec;
こういうのがあったとしてイテレータを取るには
std::vector< std::map<std::string, int> >::iterator i = map_vec.begin();
と長ったらしく書かないといけないが、autoで型推論させると
auto i = map_vec.begin();
でいいわけ
0588名前は開発中のものです。2013/10/25(金) 12:06:29.04ID:0QlHYD53
>>586
勘違いしてる可能性があるから一応念のため言っておくけど
auto型っていう型がある訳ではないからね
0589名前は開発中のものです。2013/10/25(金) 12:51:45.87ID:SyA4+mXA
吐きそう
0590名前は開発中のものです。2013/10/25(金) 12:54:36.09ID:bYWNxFd9
エラーが?
0591名前は開発中のものです。2013/10/25(金) 13:00:27.54ID:t+n4YTsO
コアかもしれん
0592名前は開発中のものです。2013/10/25(金) 21:11:21.10ID:eOV2PGNk
別にイテレータじゃなく適当なクラスのバッファにならないの?型推論で

void hoge(auto a,auto b);
とかでもいいのかなーと
0593名前は開発中のものです。2013/10/25(金) 22:18:46.67ID:W9GSrEjC
template<class T1, class T2>
void hoge(T1 a, T2 b);
0594名前は開発中のものです。2013/10/25(金) 23:24:22.57ID:NxjXgve5
>>592
それに近い使い方は戻り値のautoかな
しかし確かに>>593みたいな糖衣構文が来ても悪くないような気もするね
ただ、C++のテンプレートだと特殊化が命みたいなとこもあるからなぁ
0595名前は開発中のものです。2013/10/29(火) 21:52:21.38ID:o1ek35hj
テンプレートメソッドをオーバーロードしたら自動的に
特殊化扱いになるようにしてくれたら良いのに
思わぬとこで「オーバーロードが曖昧です」とか言われても焦る
0596名前は開発中のものです。2013/10/30(水) 08:34:18.07ID:iB7yIVWa
テンプレートってヘッダに定義書かないとダメなの?
せっかく美しく宣言と定義わけて書いてるのに
■ このスレッドは過去ログ倉庫に格納されています