SDLスレ
■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin
01/11/11 17:59ID:u0HMN7qCSDLについてのスレッドです。
最新情報、参考になるソース、質問等
とりあえず、本山
http://www.libsdl.org/
0363名前は開発中のものです。
04/02/03 17:19ID:0RlVpYszあなたの環境でフルスクリーンでSDL_FillRect使って
ものすうんごく遅くなる最小限のサンプルプログラムを
示してくれればみんなテストしてくれると思うよ?
0364362
04/02/04 11:41ID:URHwb4SZ長くなるので一部省略します。
if(fullScreen)
screenSrf = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF);
else
screenSrf = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
while(1) {
static int px = 0;
SDL_Rect area = {0, 0, 640/2, 480};
SDL_FillRect(screenSrf, NULL, SDL_MapRGB(screenSrf->format, 255, 255, 255));
if(px > 640 / 2) px = 0;
else px++;
area.x = px;
SDL_FillRect(screenSrf, &area, SDL_MapRGB(screenSrf->format, 0, 0, 0));
SDL_Flip(screenSrf);
waitByFPS();
printf("FPS=%d\n", nowFps);
}
0365362
04/02/04 11:44ID:URHwb4SZstatic void waitByFPS() {
Uint32 nowtime,lefttime;
static Uint32 lasttime=0;
const Uint32 interval=1000/fps;
nowtime = SDL_GetTicks();
lefttime = lasttime+interval-nowtime;
if(lasttime+interval>nowtime) {
SDL_Delay(lefttime);
lasttime=nowtime+lefttime;
nowFps = fps;
} else {
nowFps = 1000 / (nowtime - lasttime);
lasttime=nowtime;
}
}
変数fpsはint型で60、nowFpsには現在のFPSが入っています。
0366362
04/02/04 11:50ID:URHwb4SZフルスクリーンにしたときにFPSが下がるのではなく、
何も写らなくなってしまいます。
問題が発生した元のプログラムも、どうやらSDL_FillRect又はSDL_Flipに
時間がかかっているのではなく、画面が実際に更新されていないだけのようです。
(つまり、nowFpsにはちゃんと60が入っている)
機種固有の問題でしょうか? よろしくお願いします。
0367名前は開発中のものです。
04/02/07 11:16ID:X+ZonyxN以下の環境で試してみましたがどの環境でも
フルスクリーン,ウィンドウモードの両方とも
正常に画面は更新されました。
ThinkPad X30, WinXP, cygwin + SDL 1.2.6
自作PC, Win2k, MinGW + SDL 1.2.6
自作PC, Linux2.4.22, SDL 1.2.5
# せめてコンパイル可能なプログラムを…
0368362
04/02/07 20:35ID:O0CtMFQfありがとうございます。そんなにたくさんの環境で...
やっぱり環境固有の問題みたいですね。
# 途中省略ってのはまずかったみたいですね。
# いや、ソース読むだけで判断するかなと...
# 想像以上に親切で迷惑をかけてしまったようです。スイマセン
0369名前は開発中のものです。
04/02/23 10:47ID:E1aLNUXaってことで保守
アーカイブファイルを元に内部のファイルのインデックス作って、
そこから SDL_RWops を生成できるってもの。
http://qas.sourceforge.jp/libraries/
VisualC++ と BCC のビルド環境しか入れてないから
gcc な人とかは自分で全ファイルをコンパイル&リンクして適当に作ってくだちい。
0371名前は開発中のものです。
04/02/26 22:15ID:dtKYNn6Bそこに置いてあるpatchって本家にマージせんの?
ちょっと本職が忙しくて睡眠時間すら削り取られてて、本家に投げる暇が無いのよ。
それに英語苦手なもんで……誰かパッチ投げだけやってくれる人いないかな。
0374名前は開発中のものです。
04/03/01 21:32ID:4drL0pqWTest/ディレクトリにあるサンプルは適当な配列をいじってベンチマークしてるだけだし。
どっかに実際に使ってるdemoとかgameありませんか?
0375名前は開発中のものです。
04/03/13 09:27ID:F3vxQxJhこれにcliantのsocketをSDLNet_AddSocket()で登録していくのだろうなーというのは
なんとなく察しがつくんですが、ここに登録したcliantに対して操作する場合、
どのようにしたらいいんでしょうか?
ドキュメントにはポインターです、としか書かれてなかったのですが、
クライアントsocketポインタの配列みたいな役割になっているのでしょうか?
SDLNet_SocketSet socketset;
SDLNet_TCPsocket i;
for (i=(SDLNet_TCPsocket)socketset; *i!=NULL; i++) {
len = SDLNet_TCP_Recv(i, message, 1024);
printf ("Received: %.*s\n", len, message);
}
みたいな感じにすればいいのかな?
0376名前は開発中のものです。
04/03/13 11:02ID:KWP+lz2iこんなかんじ?
SDLNet_SocketSet sockset;
SDLNet_TCPsocket sock[10];
SDLNet_TCP_AddSocket(sockset, sock[0]);
SDLNet_TCP_AddSocket(sockset, sock[2]);
:
SDLNet_TCP_AddSocket(sockset, sock[9]);
if (SDLNet_CheckSockets(sockset, 1000) > 0) {
for (i = 0; i< 10; i++) {
if (SDLNet_SocketReady(serversock)) {
SDLNet_TCP_Recv(sock[i], message, 1024);
}
}
}
0377名前は開発中のものです。
04/03/13 12:58ID:KWP+lz2i○ if (SDLNet_SocketReady(sock[i])) {
だった。
要するにselect()のfdsetと同じ役割と考えるとわかりやすい(というか実際に同じか)。
サイトをインチキ英訳して、
SDL 本家の ML に Mix_LoadMUS_RW() パッチ作ったよーって投げてみたよ。
http://qas.sourceforge.jp/patches/
ML 見てる分には、たまーに
「Mix_LoadMUS_RW() は実装されないの?」
って発言を見かけるから、少しは需要あるかなー。
って返事が来たんだけど、
本家に取り込んでもらうにはどうすりゃいいんだろう。
「commit してくれ」ってそのまんま頼めばいいのかな。
す、スレ違い?
0380名前は開発中のものです。
04/03/15 08:57ID:k6ohdd5m新機能の追加なのですぐにcommitされるか微妙ですが
なんらかの返信はすぐに来るはず。
怒られるようなことは、まずないと思います。
0381名前は開発中のものです。
04/03/21 17:30ID:Nmo/42G+cmp命令とmov命令の一部がアセンブラ構文エラーになって弾かれてしまいます。
WinXPかVC++5が悪いのかな。他の人はこういうふうにはならないのでしょうか?
今からVC6なんて手にはいらないし、.netならいいのかなぁ?
0382名前は開発中のものです。
04/03/24 23:18ID:vYURZF4R今VC5を使ってる人ってほとんどいないような希ガス。
だからそれだけの情報じゃぁなかなか答えようがないと思うよ。
とりあえず該当部分のコード晒してみるのはどう?
そーいうオレ自身ももっぱらMinGWなんでさっぱり分からんのだが。
0383名前は開発中のものです。
04/03/25 10:56ID:06E5ih+O想像ですが、cpuidの直後で引っ掛かってるんでないかと。
VC5にはcpuidがないとかいう噂を聞いた覚えがあります。
cpuid絡みならもしかすると、ソースの頭に
#define cpuid __asm _emit 0x0F __asm _emit 0xA2
を入れれば上手くいくかも。
自分はVC6で、今やってみたら1.2.7も普通にコンパイルできますな。
0384名前は開発中のものです。
04/04/05 08:17ID:/ekkDjoXwin32appを作るのに近い感覚で作れてなかなか良いですね。
ただ資料、特にdelphiのものは皆無といっても良いほど内のが玉に瑕。
今度入門ページとか作って見様かなぁ
0385381
04/04/07 01:48ID:Wn2bWE/gやっぱりコンパイラの問題かなぁ。
VC.netを購入する理由が別にできてしまったので、
それでコンパイルしてみることにします。
で、それでもダメだったら>>383さんのを参考にしてみまつ。
0386名前は開発中のものです。
04/04/13 00:18ID:R3klDjkdwaveをたくさん重ねて鳴らしたいのですが。
0387名前は開発中のものです。
04/04/13 01:35ID:ItZmwa9S> It supports 8 channels of 16 bit stereo audio, plus a single channel of music, ...
0388名前は開発中のものです。
04/04/13 23:06ID:R3klDjkd0389名前は開発中のものです。
04/04/13 23:45ID:n/5r7ovM>>387のは単なるdefault値だよ。
http://jcatki.no-ip.org/SDL_mixer/SDL_mixer.html#SEC22
に
The number of channels allocated.
Never fails...but a high number of channels can segfault if you run out of memory.
とある通り、メモリ(と演算速度もか?)の許す限りいくらでも取れるっぽ。
増えすぎてちゃんと鳴ってんのかどうかわからなかった。
まあ、16ぐらいは普通にいけるよ
0392名前は開発中のものです。
04/04/19 23:43ID:df6eSjfW表示してる画像を動かすと、やたらぶれて見えることってない?
静止してその場でアニメーションしてもぶれないんだけど、
画像全体を上下左右に動かすと途端にぶれて見えるみたいな。
でもCRTだと問題ないし、その液晶でだってゲーム全部ダメってこともなく……。
FPS落としてみたりして試行錯誤はしてるんだけど、うまくいかず。
世の中のゲームはどんな実装してんのか、誰か教えてくだされ……。
0393名前は開発中のものです。
04/04/20 09:47ID:Kz7PIZnRFPSなゲームだと余り目立たないけど、1/30秒位でオブジェクトを
動かすと2重にブレて見える事もある。
中途半端に遅くても駄目な例。
0394名前は開発中のものです。
04/04/21 09:16ID:GSi5k06lhttp://game6.2ch.net/test/read.cgi/game/1069793039/
とかも参考になるかも。
0395392
04/04/21 16:31ID:WKD5qBW8ありがd。やっぱ世の中安物はだめなのか……。
自分が使うぶんにはいいんだけど、
他人にプレイさせると選べないんだよね……。
0396名前は開発中のものです。
04/04/24 02:00ID:Z5qgN2Apデザイン一新しててビックリしたんだけど、
いつから変わってたんだろう…。
何でか知らんのだけど、リニューアル後は
サイトの HTML や画像まで CVS に入れるようになったみたいだね。
CVS コミット通知の ML 読んでてびっくりしたよ。
0398名前は開発中のものです。
04/05/12 07:37ID:+G0iEP7mssk試してみたけどあれはツライなぁと。
SDLのソース触ってIMEからなんとか動かしてるんですけど、
やっぱSDL_imeがほすぃ…。
0399名前は開発中のものです。
04/05/13 21:41ID:bDKw0/eZsdl-fan-jp で SDL で IME を直接使う、みたいなのが出てたね。
http://morihyphen.hp.infoseek.co.jp/prog/sdl-im.html
これ一個で X Window 系を一気にサポートできるけど
MacOS, Windows, Amiga OS 辺りがサポートできないね。
この XIM のものですら実践的じゃない部分も多いし、
実際やるとなると相当大変だな……
http://qas.sourceforge.jp/patches/
・ファイル開くのに失敗したら NULL を返すようにした。
これまではライブラリ内部でクラッシュしてたんだよ。信じられるかい?
・SDL_bdf みたいに SDL_Surface へ直接描画する関数を追加した。
・横幅を元に、文字列の中で描画できる byte 数を返す関数を追加。
文字列から横幅を取得することはできるんだけど、
それだと先に横幅が決まってる場合にスマートに自動改行の実装するのは難しいんだよね。
強制的に TTF ファイル内の埋め込みビットマップフォントが使用されてしまう問題は
Shaded や Blended の時だけ bitmap を使わないようにすればいい……と言いたいところだけど、
TTF_Size* を呼び出す時、Solid と Shaded, Blended との場合が区別できないから
互換性が失われてしまうんだよね。
TTF_Size*_{Solid|Shaded|Blended} ってのを新しく追加しようかなとも思ったんだけど、
結局互換性は保たれないからなあ。
オリジナルのコードを見るとよくわかるけど、
何と言うか、試行錯誤の爪あとがひどくて……
別のライブラリを作った方がいいのかなあ。
0402名前は開発中のものです。
04/05/30 22:14ID:XZwjpvJyパッチ作成おつー
パッチは役割毎に分けて,CVSバージョンに対して作って
直接 Sam に投げてあげると取り込まれやすいかもー
# Mix_LoadMUS_RW パッチも取り込まれてないのね…
# 今CVS見たら MikMod のみに対応した Mix_LoadMUS_RW の
# コードが入ってるっぽい…
0403名前は開発中のものです。
04/06/16 14:33ID:Ui6mhgG3Linuxではできるみたいなんだけど、WinでRubyの拡張ライブラリ
を作るやり方がさっぱりわからない…
0404名前は開発中のものです。
04/06/17 23:16ID:1bQx+Nnzサウンド用の汎用ライブラリって何かありますか?
0405名前は開発中のものです。
04/06/17 23:40ID:eN4Qw0jN感想キボンヌ
0406名前は開発中のものです。
04/06/18 03:56ID:Lm+5DsNESDL_mixerとSDL_soundあたりをまず上げてやれよ。
SDLとの組み合わせでは一番使用例が多いだろうに。
それで機能不足を感じたなら改めてOpenALあたりを調べてみるのが良い気がする。
0407名前は開発中のものです。
04/06/20 15:54ID:6tF2CK9bSDL使うには Ruby/SDL と RUDL という手があるね。
漏れ、一時期、複雑なものなら型宣言有り言語推進派だったけど、
経験積むにつれ、型宣言に大した意味ないと思った。
Rubyマンセー
0408名前は開発中のものです。
04/06/21 18:12ID:OvV70vE4俺はRuby/SDLをやって、やっぱりRubyは大規模なものには
向かないと実感したよ。
1番多いミスが、変数に予期しない値が入っちゃうということなんで。
あと、初期化されていないフィールドと配列のインデックス越えでnilを返すところね。
自動テストができないから、リファクタリングも危険が伴うし。
もしまたスクリプト言語でゲームを書く機会があったら、今度はPyGameでやってみたい。
OpenALは3D空間内で音が聞こえてるようにシミュレートするやつだから
ファイル読み込みとかはほとんどできないよ。
0409名前は開発中のものです。
04/06/22 00:54ID:BZgdUtKP> OpenALは3D空間内で音が聞こえてるようにシミュレートするやつだから
> ファイル読み込みとかはほとんどできないよ。
ということは、SDL_soundでファイル読み込み&デコードやって、
OpenALに渡すのって実は良さそうなのか?
0410名前は開発中のものです。
04/06/22 01:11ID:ITWJAyK6その程度の問題だと単にRubyに慣れていないだけだとおもわれ
大規模なものを作ろうとおもったらどんな言語でもそれなりの
経験と設計とテストが必要でしょ…
0411名前は開発中のものです。
04/06/24 01:02ID:Vimy071Tだな。インタプリンタならしょうがない。Pythonでも同じだろう。
0412名前は開発中のものです。
04/06/24 01:09ID:M2KZSJrL0413名前は開発中のものです。
04/06/24 01:10ID:M2KZSJrLしかし型あってもエラー起きるときは起こるし。
単にリファクタリングにともなうテスト作りに慣れてないだけかと
0414名前は開発中のものです。
04/06/24 01:17ID:x3Ts3VTh0415名前は開発中のものです。
04/06/24 01:25ID:M2KZSJrL0416名前は開発中のものです。
04/06/24 18:26ID:qm5ejIlDメッセージから原因もわかりやすいし。
>>412
RUDLってメンテナンス止まってない?
0417名前は開発中のものです。
04/06/25 11:00ID:owgO6tb5いやなんだけど…
SDL + GL の描画しか使ってなくても SDL_image, SDL_mixer, SDL_ttf, SGE
のDLLも付けて配布しないといけないんだよねぇ…?
0418名前は開発中のものです。
04/06/26 15:36ID:YpRH5ts9神経質になりすぎだ
0419名前は開発中のものです。
04/06/27 20:12ID:TlIkOaxmSDLは日本人が使うとどうかなっちゃうの?w
0420名前は開発中のものです。
04/06/28 01:10ID:QaShh7Zh0421名前は開発中のものです。
04/06/28 13:42ID:7p8HGt/8翻訳サイトは移転しただけ。
ttp://www.tacoworks.jp/software/SDLdoc-jp/
0422名前は開発中のものです。
04/07/01 21:15ID:nUzqGN14SDL推進してるWikiとかないの?
0423名前は開発中のものです。
04/07/02 15:48ID:z9cQVZSD今のところ無いっぽいね。
とりあえずはバラバラに存在する国内情報の
まとめページだけでも欲しいかな。
0424名前は開発中のものです。
04/07/03 23:04ID:7rPVx/6/SDLって大量の資料が必要なほど複雑なライブラリじゃないと思われ…
リファレンスマニュアルとチュートリアル以外でどんな資料が欲しいの?
0425名前は開発中のものです。
04/07/03 23:14ID:1w5sa/fHそれだけじゃ足りないってことなんだろうけど。
0426名前は開発中のものです。
04/07/04 05:22ID:dw9vgL9Y0427名前は開発中のものです。
04/07/04 08:41ID:ctIGerBfSDL_image の場合 README に書いてある内容が全ての仕様だと思うけど…
ユーザが使うのは、
* SDL_Surface *IMG_Load(const char *file);
* SDL_Surface *IMG_Load_RW(SDL_RWops *src, int freesrc);
* SDL_Surface *IMG_LoadTyped_RW(SDL_RWops *src, int freesrc, char *type);
* SDL_Surface *IMG_ReadXPMFromArray(char **xpm);
くらいしかなくて、アプリケーションが使うのはほぼ一番目の関数だけ。
でも SDL_ttf とか SDL_net のドキュメントはもう少し欲しい気がするね。
0428名前は開発中のものです。
04/07/04 14:50ID:CEd3aHf1http://jcatki.no-ip.org/SDL_ttf/
http://jcatki.no-ip.org/SDL_net/
でもわかりにくいんだよなー。
特に SDL_ttf の場合、色んな描画方法に関して、
どう描画されるかではなくて重いだの軽いだの、そういうことばっかり書かれてたと思う。
0429名前は開発中のものです。
04/07/04 21:55ID:dw9vgL9Yhttp://gamdev.org/w/?%5B%5BSDL%5D%5D
0430名前は開発中のものです。
04/07/05 21:36ID:nSK/GKkyhttp://jcatki.no-ip.org/SDL_image/
http://jcatki.no-ip.org/SDL_mixer/
てか、ttp://jcatki.no-ip.org/から辿れば良いってことで。
0431名前は開発中のものです。
04/07/07 01:04ID:n/Oy7Dm9ディストリビューション毎に、glibcやらlibstdc++やらのバージョンがバラバラだったり、
ディストリビューション標準パッケージSDL_mixerが対応フォーマットさっぱりだったりとか。
どうにかならんもんかな。
0432名前は開発中のものです。
04/07/07 01:08ID:W6JVsWwD0433名前は開発中のものです。
04/07/07 01:16ID:n/Oy7Dm9やっぱそんな感じで割切るしかないですか。
とすると、RH系だと、今ならFedora2に対応しておけば良いのかな。
0434名前は開発中のものです。
04/07/07 01:25ID:ixnokw2/0435名前は開発中のものです。
04/07/07 01:34ID:n/Oy7Dm9う〜ん、確かに。
けど、LGPLのをスタティックリンクするってことは、
アプリ側の.oを配布する必要があるのかな。
それと、libc,libm,libstdc++とかスタティックリンクするとデカそうってのも微妙な感じだ。
0436名前は開発中のものです。
04/07/07 16:05ID:Cr3igRfZスタティックリンクしたらアプリ側のソースコードを公開する必要がある.
Linuxでのバイナリ配布は
1) 各ディストリビューション毎にバイナリを作る
2) メジャーなディストリビューションだけ作ってあとはユーザにコンパイルさせる
3) 全部スタティックリンクしたのを一つだけ配布
のどれかじゃないかなぁ… あ…
4) バイナリと libSDL.so や libSDL_mixer.so を一緒に配布
(LD_LIBRARY_PATH を設定して起動するシェルスクリプトを同封)
ってのもありえるか…
0437名前は開発中のものです。
04/07/07 20:12ID:qEMx/JGKLGPLのはスタティックリンクしても公開しなくていいのでは。
0438431
04/07/07 22:19ID:TRH5OiZw・自分が普段使ってるディストリビューション用の実行ファイルと、
まともなSDL_mixerのrpmを用意する。
・それとは別に、アプリの.o(または、まとめて.aにするかも)とMakefileを用意する。
ぐらいにしておこうかと思います。
しかし、各ディストリビューション間のバイナリ互換性の低さは頭のイタイ問題ですな。
0439名前は開発中のものです。
04/07/08 00:01ID:nQ5A0rf+LGPL部分は差し替えれるようにしなきゃだめじゃなかった?
0440名前は開発中のものです。
04/07/08 00:55ID:0z9S7ZSR> LGPL部分は差し替えれるようにしなきゃだめじゃなかった?
その通り。だからアプリの.oを配布で正しいと思うんだけど。
アプリの.o + 差し替えたLGPLのライブラリ
で再構築可能だろ?
0441436
04/07/08 11:56ID:HbCYsiEEちょっと聞きたいんだけど…
オブジェクトファイルだけあったら差し替え可能として認められるのかな?
この時オブジェクトファイルのフォーマットとかは問題にならんのかしら?
あ… 配布したスタティックリンクされた実行可能ファイルの元に
なった.oさえあればOKってことかな?
0442名前は開発中のものです。
04/07/08 14:48ID:1+ItRMvEオブジェクトファイルのフォーマットは、gcc の吐くような極一般的なものなら全然問題無いと思うよ。
>>440 の言う通り、君が作ったソフトウェアのオブジェクトファイルさえ入ってれば大丈夫だから、それで合ってるね。
0443名前は開発中のものです。
04/07/10 20:51ID:21jpHlag誰か助けてください。
#include <SDL.h>
doubleax,ay;
int main(int argc, char** args) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Surface *screen;
screen = SDL_SetVideoMode(640, 480, 8, SDL_SWSURFACE);
while(true) {
SDL_Event event;
SDL_MouseMotionEvent mouse;
while(SDL_PollEvent(&event)) {
if(event.type==SDL_QUIT) {
return 0;
}
if(event.type==SDL_MOUSEMOTION){
ay += mouse.x;
ax += mouse.y;
}
}
SDL_Delay(10);
}
}
0444名前は開発中のものです。
04/07/10 22:02ID:JmED2rrl0445名前は開発中のものです。
04/07/10 22:45ID:MW3XWIRhdx, dy を初期化してないのはC的にいいとして、mouse を初期化してねーじゃねーか。
ググったらこことか引っかかったから見てみれ。
http://www.pl-berichte.de/work/sdl/sdl-teil2.html
0446445
04/07/10 22:47ID:MW3XWIRhってとこね。ってよく見たらドイツ語だ。すまん。でもソースは分かるよね。
0447名前は開発中のものです。
04/07/10 22:53ID:DRUUao5j0448名前は開発中のものです。
04/07/10 23:10ID:MW3XWIRh0449名無しさん@そうだ選挙に行こう
04/07/11 07:05ID:VqfcMOHHありがとうございます。
>>447
>>448
作りかけのソースを削ったのでおかしくなってしまいました。
0450名無しさん@そうだ選挙に行こう
04/07/11 09:59ID:E7W22GHh0451N速に書き込めません。
04/07/11 10:18ID:wvsVVX1k何とかしてください
0452名無しさん@そうだ選挙に行こう
04/07/11 12:11ID:/yFc1fy2そんなときはあれだよ。 あれ。
0453名前は開発中のものです。
04/07/12 00:37ID:A2nXW2Noみたいに SDL_Surface* を引数に取る関数を呼ぶときに楽しようと思って、
class CSDLSurface {
...
operator SDL_Surface*() { return surface; } // surface は SDL_Surface*
などとクラス内に書いたんです。でも
Kanji_PutText( ... , screen, ... ); // screen は CSDLSurface
とやっても、VC.NETに
引数を 'CSDLSurface *' から 'SDL_Surface *' に変換できません
と怒られるし、(SDL_Surface*)screen とやってキャストして渡しても、クラスのアドレスが
そのまんま渡ってるみたいでうまくいきません。そもそもなんで operator をオーバーロード
してるのに型変換してくれないんでしゅか。
0454453
04/07/12 00:39ID:A2nXW2No0455名前は開発中のものです。
04/07/12 01:05ID:1R+yHQE6> Kanji_PutText( ... , screen, ... ); // screen は CSDLSurface
Kanji_PutText( ... , screen(), ... );
じゃないかい?
0456453
04/07/12 01:29ID:A2nXW2Noscreen()とやると、"関数には評価されません" と言われてしまいます、、
それと453に間違いがもう一つ
> Kanji_PutText( ... , screen, ... ); // screen は CSDLSurface
screenは CSDLSurface* です
0457名前は開発中のものです。
04/07/12 09:21ID:d4JCqMcp> screenは CSDLSurface* です
じゃ、
Kanji_PutText( ... , (*screen)(), ... );
Kanji_PutText( ... , screen->operator(), ... );
のどっちかじゃない?
0458453
04/07/12 23:23ID:A2nXW2Noどうもお手数かけてしまってすみませんでした。
Kanji_PutText(..., screen->operator SDL_Surface*(), ...);
でコンパイルは通ったんですが、よく考えてみるとどうやらscreenがポインタ
であることが原因だったようで、
CSDLSurface screen; // ポインタにするのをやめた
...
Kanji_PutText(..., screen, ...);
みたいに、普通にクラスを渡せばちゃんと SDL_Surface* に変換してくれるんですね。
これってC++の基本ですか? 恥ずかしいかも。
でもなんか、クラスをポインタでなく保持するのはよろしくない、みたいな文章をどこかで
読んだ気がして、それが引っかかってなんか気が進まないです、、
0459名前は開発中のものです。
04/07/13 00:35ID:yFmAkR9z大体予想通りの結果?長文スマソ。
#include <iostream>
using namespace std;
class Foo {};
class Bar {
Foo foo;
public:
operator Foo*() {return &(this->foo);}
};
void hoge(Foo* p_foo_)
{
cout << p_foo_ << endl;
}
int main(int argc,char* argv[])
{
Bar bar;
Bar* p_bar = &bar;
hoge(bar);
// hoge(bar()); // no match for call to `(Bar) ()'
// hoge(p_bar); // cannot convert `Bar*' to `Foo*' for argument `1' to `void hoge(Foo*)'
hoge(*p_bar);
// hoge((*p_bar)()); // no match for call to `(Bar) ()'
// hoge(p_bar->operator()); // `class Bar' has no member named `operator()'
return 0;
}
0460名前は開発中のものです。
04/07/13 03:32ID:P6ImUkzN0461名前は開発中のものです。
04/07/13 03:58ID:szTJAEHMポインタなら単純に参照を外すだけでいい
Kanji_PutText( ... , *screen, ... );
ただ、暗黙のキャストは怖いから、
楽しようと考えている程度なら、素直にGetterを作った方が良いと思う。
0462453
04/07/13 23:44ID:KSTvEm7j暗黙の型変換を故意に狙うのはよくないですね。それに、*screen で返って
くるのがポインタってのも直感的でないですし。結局
SDL_Surface* GetSurface() const { return surface; }
を加えました。
■ このスレッドは過去ログ倉庫に格納されています