[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
|
メール
|
1-
101-
201-
301-
401-
501-
601-
701-
801-
901-
1001-
1101-
1201-
1301-
1401-
1501-
1601-
1701-
1801-
1901-
2001-
2101-
2201-
2301-
2401-
2501-
2601-
2701-
2801-
2901-
3001-
3101-
3201-
3301-
3401-
3501-
3601-
3701-
3801-
3901-
4001-
4101-
4201-
4301-
4401-
4501-
4601-
4701-
4801-
4901-
5001-
5101-
5201-
5301-
5401-
この機能を使うにはJavaScriptを有効にしてください
|
管理人の独り言(プログラミング関連)
1
:
みみず★
:2008/08/10(日) 23:28:15
あまりにもプログラミングの内容が増えすぎた。
よって隔離スレの中を更に隔離。
2
:
774さん
:2008/08/10(日) 23:32:49
このスレは、
Sleipnir 50%、プログラミング 50%で出来ています。
3
:
774さん
:2008/08/10(日) 23:34:49
Sleipnirの戻る、進むの復元はそのページが全て読み込まれてから行われる。
JavaScriptで例えるならば、
window.onload
のタイミングである。
よって、画像の読み込みも全て含めてから復元が行われる。
ただ、此れは瞬間的に読み込まれるサイトならば問題ないのだが、
画像が一杯のサイトだと復元できるまでの所要時間が長すぎる。
是非ともタブを復元した瞬間に前後移動が出来るようにして欲しい。
4
:
774さん
:2008/08/11(月) 02:08:37
スーパープログラマーへの道
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html
----
トリプルバッファリング。
それと描画の部分は関数ポインタにしてやるっていうのも俺の妄想と一緒だなあ。
5
:
774さん
:2008/08/11(月) 02:12:19
以下全て引用
-----
第4F回 正確な60FPSの実現(ウエイトタイマ構成法) 99/6/8
どことなくマニアックになってきた、この連載であるが、今回は、正確な60FPS(秒間60フレーム)を実現するためのウエイトタイマ(時間待ち)ルーチンについて説明する。
よく、タイミングはDirectDrawでflipすれば速いマシンなら60FPSになるので、それで調整するという人もいるが、これは、
1.遅いマシンでは60FPSにならない(タイミングが必要ならtimeGetTimeで調整すべき。第49回参照)
2.Flipは、使わないほうが無難。(第44回参照)
3.画面のリフレッシュレートは60Hzとは限らない。
という3つの理由で間違っている。
あと、正確に60FPS刻むような待ち時間を計算できない人がよくいるが、以下のソースを見れば、なんとなくコツがつかめるはずである。コツとしては、
1.システムに負荷をかけないよう、余分な時間はSleepする。(Sleepの精度を考慮に入れて、直前まではSleepさせない)
2.今回の待ち時間は、1000/FPSとやってしまうと、端数分だけおかしくなる
3.かと言って、精度を出すためにdouble型で今回の待ち時間を計算するのは少し、無駄
の3ポイントぐらいであろう。速いマシンで正確に60FPSを刻まないのは、この待ち時間の消費のさせかたが間違っているからである。描画(blt)の直前にこのルーチンを呼べば、必ず安定して、指定のFPSになる。
--------------------------------------------------------------------------------
void ys::ElapseTime(void){ // (C)yaneurao 1998-1999
// 厳粛かつ正確かつ効率良く時間待ちをする
if (iFPS == 0) return ; // Non-wait mode
static DWORD lastdraw = 0; // 前回の描画時刻
// (不運にも第一発目のtimeGetTime() == 0とかゆーこともあるが、それは構わない)
DWORD t = timeGetTime(); // 現在時刻
dwFPSWaitTT = (dwFPSWaitTT & 0xffff) + dwFPSWait; // 今回の待ち時間を計算
// dwFPSWaitは、待ち時間の小数以下を16ビットの精度で持っていると考えよ
// これにより、double型を持ち出す必要がなくなる。
// dwFPSWaitTT = 1000 * 0x10000 / FPS;である
DWORD dwWait = dwFPSWaitTT >> 16; // 結局のところ、今回は何ms待つねん?
// 1フレーム時間を経過しちょる。ただちに描画しなちゃい!
DWORD dwElp = (DWORD)(t - lastdraw); // 前回描画からいくら経過しとんねん?
if (dwElp>=dwWait) {
lastdraw = t;
return ;
}
// ほな、時間を潰すとすっか!
// まだ時間はたっぷりあるのか?
// 4ms以上消費する必要があるのならば、Sleepする
if (dwWait-dwElp >= 4) Sleep(dwWait-dwElp-3);
// いまdwWait>dwElpなのでdwWait-dwElp>=0と考えて良い
// 95/98/NTで測定したところSleep(1);で1ms単位でスリープするのは可能
// ただし、実装系依存の可能性もあるのでSleepの精度は3ms以内と仮定
while ((timeGetTime()-lastdraw)<dwWait) ;
// ループで時間を潰す(あまり好きじゃないけど)
// これで、時間つぶし完了!
lastdraw += dwWait; // ぴったりで描画が完了した仮定する。(端数を持ち込まないため)
}
--------------------------------------------------------------------------------
しかし、きちっと、このようなFPS調整のための時間待ちルーチンを書いている人を見たことがない。
小数点以下をdoubleで表記するのではなく、256倍や65536倍して整数で代用するのは、常用テクなのだが、意外と知らない人が多い。もっとも、なんでもかでも1命令1クロックで実行してしまう最近のCPUではあまり意味のないことなのかも知れない。しかし、最近のプログラマは、lineやcircleをアセンブラで実装した経験が無いのか?cos,sinを65536倍した整数テーブルをいじくり回すプログラムを書かないのか?そんな人たちが3Dでぐりぐり動くゲームを作っているのか?!まったくもって驚きである。8月に恐怖の大王が来るというよりは、65536倍衝撃的なんだってば!!
6
:
774さん
:2008/08/11(月) 14:56:27
int main(int argc, char **argv){
const int count = 100;
const int * const p = &count;
const int * const * const pp = &p;
const int * const * const *ppp = &pp;
}
7
:
774さん
:2008/08/11(月) 15:15:06
>>
http://jbbs.livedoor.jp/bbs/read.cgi/computer/38153/1205557370/492
が大体理解できた。
---
メタ関数::テンプレート・メタプログラミング
http://cppemb.blog17.fc2.com/blog-entry-90.html
---
のおかげ!
8
:
774さん
:2008/08/12(火) 01:31:44
JavaScript:document.body.innerHTMLのガイドライン4
http://society6.2ch.net/test/read.cgi/gline/1171265251/122
---
122 :水先案名無い人:2007/11/02(金) 12:04:48 ID:7m0B59Ki0
ちょっと趣旨違うと思うけど
①メモ帳開く
②以下の文を貼りつける
<body onKeyDown=K=event.keyCode><script>X=[Z=[B=A=12]];h=e=K=t=P=0;function Y()
{C=[d=K-38];c=0;for(i=4;i--*K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/
A)*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1
if(e=!e){if(f|B){for(l=228;i--;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t
%7]-4,0,1,t-6?-A:-1];l--;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;--j>A;)
Z[j]=Z[j-A]}h+=A}for(i=S="";i<240;X[i]=Z[i]|=++i%A<2|i>228)i%A?0:S+="<br>",S+=X
[i]?"■":"_";document.body.innerHTML=S+P;Z[5]||setTimeout(Y,99-P)}Y()</script>
③html形式で保存して、起動する
---
テトリス。
9
:
774さん
:2008/08/12(火) 02:26:04
ブラウザでc言語 part1‐ニコニコ動画(夏)
http://www.nicovideo.jp/watch/sm3702138
---
codepad
http://codepad.org/
---
こんなサイトがあったのか・・・
10
:
774さん
:2008/08/15(金) 11:51:04
プログラミングキャンプの講義資料を公開します - IT戦記
http://d.hatena.ne.jp/amachang/20080814/1218677014
11
:
774さん
:2008/08/15(金) 11:51:40
>>10
正直なところ、
全体のフィールドと、あるブロックを同じ関数で描画させる方法は凄いなと思った。
12
:
774さん
:2008/08/15(金) 13:41:20
俺もゲームプログラミングを本格的に始めるべきなのか。
でも普通のプログラミングも出来ないのにどうすればいいんだああああああああああああああああああああああ
13
:
774さん
:2008/08/15(金) 22:03:25
ちょwwwwwwwwwwwwwww
----
素人がプログラミングを勉強するブログ
http://d.hatena.ne.jp/javascripter/
----
こいつ中学生wwwwwwwwwwwwww
14
:
774さん
:2008/08/15(金) 22:26:15
>>13
っ!
俺も中学生の時ちゃんとプログラミングを勉強しておかないといけなかったっ!
15
:
774さん
:2008/08/20(水) 17:35:38
>>14
取り敢えず最新の仕様を勉強してYahoo!したいと思う。
__noSuchなんとか__とか、
__proto__とか
__defineGetter__とか
__defineSetter__とか
function.next()とか頑張って覚えちゃうぞー!
16
:
774さん
:2008/08/20(水) 17:36:14
と言って、殆ど分かっているつもりなんだけれども。
配列の分割代入って面白いの?
17
:
774さん
:2008/08/20(水) 17:43:21
サブクラス化したウィンドウに対してウィンドウ毎に変数を確保する方法は直接無い。
SetWindowLongPtr()とかを使おうとしても、自分でExtraなメモリを確保していないし、元々内部で使用しているかもしれない。
だから無理である。
しかし、EditBoxに対して、Ctrl+Aを押したときに全て選択だとかはみなロジックは一緒なので、サブクラス化するためごとに関数を用意するというのもとてもソースの無駄遣いである。
だからそこらへんアセンブリ言語レベルでどうにかならないかなと思って適当に書いて、二時間ぐらいかけて上手くいった。
時間かかりすぎだろうJK。
が利用できるかテスト。
18
:
774さん
:2008/08/20(水) 17:45:07
void *SetProcMod(
LRESULT (CALLBACK *proc)(LPVOID, HWND, UINT, WPARAM, LPARAM),
SIZE_T bytes = 0
) const
{
static const BYTE code[] = {
0x53, //PUSH EBX
0x89, 0xE3, //MOV EBX, ESI
0x81, 0xC3, 0x04, 0x00, 0x00, 0x00, //ADD EBX, 4
0xB8, 0x00, 0x00, 0x00, 0x00, //MOV EAX, imm32
0x87, 0x03, //XCHG EAX, [EBX]
0x5B, //POP EBX
0x50, //PUSH EAX
0xB8, 0x00, 0x00, 0x00, 0x00, //MOV EAX, imm32
0xFF, 0xE0, //JMP EAX
};
BYTE *p = (BYTE *)VirtualAlloc(
NULL,
sizeof(code) + sizeof(WNDPROC) + bytes,
MEM_COMMIT,
PAGE_EXECUTE_READWRITE
);
memcpy(p, code, sizeof(code));
*((DWORD *)(p + 10)) = (DWORD)(p + sizeof(code) + sizeof(WNDPROC));
*((DWORD *)(p + 19)) = (DWORD)proc;
*((WNDPROC *)(p + sizeof(code))) = SetProc((WNDPROC)p);
return p + sizeof(code) + sizeof(WNDPROC);
}
19
:
774さん
:2008/08/20(水) 17:48:29
codeは雛型。
codeとWNDPROC型と指定されたバイト数のメモリを確保し、実行、読み込み、書き込みを許可する。
次に雛形をコピー。
そして、必要な情報を書き込んだ後、サブクラス化を実行する。
そして、確保されたメモリのポインタを返すと。
20
:
774さん
:2008/08/20(水) 17:51:01
こうすると、procの第一引数に確保されたメモリのポインタが入っている。
また、次に呼び出すプロシージャのアドレスは、pを渡されたアドレスだとすると。
*(((WNDPROC *)p) - 1)
で取得できるという代物だ。
此れで態々グローバル変数を利用する必要が無くなる。
メモリの管理についてはもう少し良い方法があるが、64kb程しか一回にリークしないので問題ないかと。
此れでソースが少なくてすむね!
21
:
774さん
:2008/08/20(水) 17:57:09
というか、二時間というのはバイトコードの打つ方法に時間がかかった。
Intelの資料糞読みにくい。
22
:
774さん
:2008/08/20(水) 18:00:45
何故[ESP]を直接参照する方法が無いんだ!
0x89, 0xE3, //MOV EBX, ESI
は
0x89, 0xE3, //MOV EBX, ESP
の間違えですた。
23
:
774さん
:2008/08/20(水) 18:01:57
[ESP]を直接参照できればもう少しソースコードを短くすることが出来るのだがなあ。
というか此れ自体も適当に入力したので、もうちょっと短く出来るのかもしれない。
24
:
774さん
:2008/08/20(水) 18:09:44
一応、返却値として、その確保されたメモリへのポインタを返しているので、
bytesに適当な値を指定したら、
*((int *)p) = 123;
とかすれば、初期状態で変数を与えることも出来るねえと。
因みに、VirtualAllocの仕様上メモリの内容は0で初期化されてます。
25
:
774さん
:2008/08/20(水) 18:10:26
と言うことで、此れをMemoPanelに利用しようかなあと。
環境依存だから動かない環境があるかなあ?
26
:
774さん
:2008/08/20(水) 18:42:44
おしゃべり総合商社「ネイリー」
http://narude531masu.blog59.fc2.com/
---
P検なんてあったなあ。
なつかしす。
今じゃ要らない資格ですね。因みに俺は四級のはず。
Wordとかエクセルは全然使わないんだけれどもwwww
27
:
774さん
:2008/08/20(水) 19:55:58
うはwww、VirtualAlloc関数滅茶苦茶メモリ勿体無いwwwww
ちゃんとメモリ管理はした方が良いようですwwwww
28
:
774さん
:2008/08/20(水) 21:58:36
operator new[]で確保したメモリは実行できることが保証されているの?
良く分からんwww
29
:
◆rCEzuNnL0g
:2008/08/21(木) 18:40:10
Sleipnir.APIが利用できれば、かなりスクリプト+EXEで色々と正確に出来そう。
正確というのは、違うウィンドウとかに効果を起こさないとかそんなことね。
Sleipnir.API.Handleを見ればウィンドウハンドルが分かるので、GetWindowThreadProcessId()を利用すればプロセスIDを取得することが出来る。
で、そこでOpenProcess()を利用すれば、プロセスハンドルを取得できる。
という事で、此れを利用すれば色々とウマーなことが出来るのはではなかろうかと。
VirtualAllocEx()とか使ったり、WriteProcessMemory()とか使うとウマーじゃなかろうか。
まあここら辺でも見ればいいかと。
-----
常駐プログラム隠蔽テクニック
http://ruffnex.oc.to/kenji/text/dll_inj/
-----
30
:
◆rCEzuNnL0g
:2008/08/21(木) 18:42:56
---
ProcessHandle_ProcessID_WindowHandle - trick-with-Wiki
http://wiki.trick-with.net/ProcessHandle_ProcessID_WindowHandle.html
---
プロセスIDとプロセスハンドルとウィンドウハンドルの件
良いサイト発見!
31
:
◆rCEzuNnL0g
:2008/08/21(木) 20:40:14
次の JavaScript の仕様はこうなる! ECMAScript 3.0 から 3.1 への変更点まとめ - IT戦記
http://d.hatena.ne.jp/amachang/20080821/1219302804
---
ちょwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
IEでもgetter、setter始まったなwwwwwwwwwwwwwwwwwwwwwwwwww
まだちょっと理解できていない部分があるので、これから勉強を。
32
:
◆rCEzuNnL0g
:2008/08/21(木) 20:43:39
__defineGetter__、__defineSetter__
で定義したGetter,Setterはfor inで列挙できるみたい。
まあ、どうでもいいことか。
33
:
◆rCEzuNnL0g
:2008/08/21(木) 20:47:13
MemoPanelに検索機能があったほうがウマーかなあ。
34
:
◆rCEzuNnL0g
:2008/08/21(木) 20:56:33
>>29
スクリプトからEXEを起動するには、
new ActiveXObject("WScript.Shell").Run()
で。
---
1.10 プログラムを実行する、ファイルやフォルダを開く(Runメソッド) - VBScript & JScript(JavaScript) Tips for WSH
http://www.happy2-island.com/vbs/cafe02/capter00110.shtml
---
新着レスの表示
名前:
E-mail
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板