斜めスクロールが出来ないぞゴルァ!
■ このスレッドは過去ログ倉庫に格納されています
0001厨房似非PG
01/11/16 15:46ID:???LPDIRECTDRAWSURFACE lpPrimary; //基本サーフェス(画面表示と同じもの)
LPDIRECTDRAWSURFACE lpBack; //バックバッファサーフェス(描画対象と同じもの)
LPDIRECTDRAWSURFACE lpSc;
DDCOLORKEY ddck;
LPDIRECTDRAW lpDDraw;
POINT ptBase; // スクロール基準点
void Draw(void) //メインルーチン
{
//変数宣言
static int i;
static int j; //アニメーションフラグ
static int x,y; //座標の設定
static int size=32; //拡大縮小用変数
static int sc,sc2;
RECT Scrrc={0,0,640,480}; //画面のサイズ
RECT Charrc[]={{0,0,64,64}, //BMPの座標を指定する
{64,0,128,64},
{128,0,192,64}};
// 左エリア
if( ptBase.x > 0){
// 左上
if( ptBase.y > 0){
SetRect( &Scrrc, 0, 0, ptBase.x, ptBase.y);
lpBack->BltFast(ptBase.x,ptBase.y,lpSc,&Scrrc,DDBLTFAST_NOCOLORKEY|DDBLTFAST_WAIT);
}
// 左下
if( ptBase.y <= 640){
SetRect( &Scrrc, 0, ptBase.y, ptBase.x, 480);
lpBack->BltFast(ptBase.x,ptBase.y,lpSc,&Scrrc,DDBLTFAST_NOCOLORKEY|DDBLTFAST_WAIT);
}
}
// 右エリア
if( ptBase.x <= 640){
// 右上
if( ptBase.y > 0){
SetRect( &Scrrc, ptBase.x, 0, 640, ptBase.y);
lpBack->BltFast(ptBase.x,ptBase.y,lpSc,&Scrrc,DDBLTFAST_NOCOLORKEY|DDBLTFAST_WAIT);
}
// 右下
if( ptBase.y <= 480){
SetRect( &Scrrc, 0, ptBase.y, ptBase.x, 480);
lpBack->BltFast(ptBase.x,ptBase.y,lpSc,&Scrrc,DDBLTFAST_NOCOLORKEY|DDBLTFAST_WAIT);
}
}
//ウェイト処理
static DWORD Nowtime,Prevtime;
Nowtime=timeGetTime();
if((Nowtime-Prevtime)<WAIT)return;
Prevtime=Nowtime;
lpPrimary->Flip(NULL,DDFLIP_WAIT);
}
0002名無しさん@お腹いっぱい。
01/11/16 15:53ID:???0003名無しさん@お腹いっぱい。
01/11/16 16:11ID:???.// /)
<_」 // ,,-''ヽ、
、-// ,, -''" \
\イ _,-'" \
.' /\ \
__ //\\ \
_/ /|[]::::::|_ / \/\\ /
゙ ./| ̄ ̄ ̄ ̄ //\ \/ \ // ___
| |:::「「「「「「 / \/\ /\\ /:::/ ./| |__
_..| |:::LLLLL//\ \/ \/\\/::::::/ / | ロ .|lllllllllllll
/ llllll| |:::「「「「 / \/\ /\ .\/ ./::::::::/ / ./ .| |lllllllllllll
__ llllll| |:::LLL.//\ \/ \/\ /::::::::/ | / .| ロ .|lllllllllllll
(666 llllll| |:::「「「/ \/\ /\ \/ /::::::::/ | ||/ ..| |lllllllllllll
llllll| |:::LL//\ \/ \/\ ./::::::::/ .| ||/ ..|
| |:::「./ .\/\ /\ \/ /::::::::/⌒ヽ、 .| ||/ ..|
| |:::l//\ \/ \/\_, -― 、 ''"⌒ヽ,_
(⌒ヽ、_,ノ⌒Y" Y .....⌒)
(⌒ヽー゙ ....::( ..::....... .__人.....::::::::::::::::::::
_ノ⌒ヽ Y⌒ヽ;;:::::"'::::::::::::::::::::::::::::: ___
___( ゙ ....:::..... Y" ∧_∧ /
// ll__ヽ_::::::::::::::::::::::::::::::ヽ....( ´Д`)< 1の母です。
「 ヽO≡≡O:::::::::::::::::::::::::::::::::::/ つ _つ \____
゙u─―u-――-u 人 Y
し'(_)
0004名無しさん@お腹いっぱい。
01/11/16 16:27ID:???0005名無しさん@お腹いっぱい。
01/11/16 16:29ID:???0006名無しさん@お腹いっぱい。
01/11/16 17:24ID:???0007名無しさん@お腹いっぱい。
01/11/16 18:35ID:???俺も弄るよ。えーと、エロ本エロ本・・・
0008名無しさん@お腹いっぱい。
01/11/16 21:04ID:???左下のif は 480 と比較じゃないの?
0より上、640(480)以下という表記は正しい?
0以上640(480)未満ではないの?
そもそも、何をしようとしてるかがわからん。
時下げ位しろ、TABを入れろ。
回線切って首を吊れ。
0009名無しさん@お腹いっぱい。
01/11/16 21:29ID:ChXOCnyRとりあえず、どんなゲームでどのように使うのか教えてくれればマジレスするけど。
日本語でいいから。ちょっとこのソースだけだと難しい。
それとも斜めスクロールできれば、どの方法でもOK?
0010_
01/11/16 21:38ID:MzjylXs90011_
01/11/16 22:24ID:MzjylXs9static変数嫌い
生数字嫌い
インデントしないの嫌い
0012名無しさん@お腹いっぱい。
01/11/16 22:39ID:???>バックバッファサーフェス
微妙に変な気がするのは気のせいか
0013名無しさん@お腹いっぱい。
01/11/16 22:52ID:???でも言いたい事は解る。
プライマリサーフェスとそのバックバッファ。3つ目は作業用サーフェスってとこか。
作業用サーフェスに描画した背景を少しずつずらしてバックバッファに転送して
フリップさせたいんだろう。まあ、>>1で来なけりゃ意味のない話だけど。
0014名無しさん@お腹いっぱい。
01/11/16 23:08ID:???もしかして半年くらい前から斜めスクロールで悩んでるの?>>1
0015名無しさん@お腹いっぱい。
01/11/16 23:23ID:???まじで、半年前にも見たぞこんなスレ
プログラム板で見た。
あと、DirectXスレでも同じ質問があったし、
したらばのゲ術板でも見た。
★DirectDrawで斜めスクロールの仕方
http://www.shitaraba.com/cgi-bin/read.cgi?key=1000542496_1&bbs=gamecreate&ls=100
0016名無しさん@お腹いっぱい。
01/11/16 23:48ID:???ワラタ。そのスレひどすぎ(w
というかソースを見る限り、>>1は斜めどころか普通にスクロールもできなさそう。
0017名無しさん@お腹いっぱい。
01/11/17 00:37ID:???0018名無しさん@お腹いっぱい。
01/11/17 00:38ID:???改良ですか?
全部作りなおしでは駄目ですか?
0019名無しさん@お腹いっぱい。
01/11/17 00:57ID:???みなさま糞スレ立ててすみません。ってか生きててすみません。
0020名無しさん@お腹いっぱい。
01/11/17 00:58ID:???002115
01/11/17 01:04ID:???今見たら全部消されてるし・・・確かしたらばってスレ立てたやつがレス消せるんだよな・・・
っておい!
0022名無しさん@お腹いっぱい。
01/11/17 01:14ID:???0023名無しさん@お腹いっぱい。
01/11/17 01:50ID:???0024名無しさん@お腹いっぱい。
01/11/17 02:28ID:B9jLKAU+LPDIRECTDRAWSURFACE lpBack;
LPDIRECTDRAWSURFACE lpSc;
POINT pt;
void Scroll(void)
{
RECT rect;
if(pt.x<0){pt.x+=640;} else if(pt.x>639){pt.x-=640;}
if(pt.y<0){pt.y+=480;} else if(pt.y>479){pt.y-=480;}
if(pt.x!=0){
SetRect(&rect, 0, 479-pt.x, 640-pt.x, 480);
lpBack->BltFast(pt.x, 0, lpSc, &rect, DDBLTFAST_NOCOLORKEY|DDBLTFAST_WAIT); }
if(pt.y!=0){
SetRect(&rect, 639-pt.x, 0, 640, 480-pt.y);
lpBack->BltFast(0, pt.y, lpSc, &rect, DDBLTFAST_NOCOLORKEY|DDBLTFAST_WAIT); }
SetRect(&rect, 0, 0, 640-pt.x, 480-pt.y);
lpBack->BltFast(pt.x, pt.y, lpSc, &rect, DDBLTFAST_NOCOLORKEY|DDBLTFAST_WAIT);
SetRect(&rect, 639-pt.x, 479-pt.y, 640, 480);
lpBack->BltFast(0, 0, lpSc, &rect, DDBLTFAST_NOCOLORKEY|DDBLTFAST_WAIT);
lpPrimary->Flip(NULL,DDFLIP_WAIT);
pt.x++; pt.y++;
}
002524
01/11/17 02:29ID:B9jLKAU+>>1がネタでもな。
やり方は、>>13が言ってるのと同じ。
作業用サーフェス全体に背景を置いておいてバックバッファにずらして転送。
ただし、背景絵が上下左右で繋がってないと変に見えるけど。
背景の(0, 0)が表示画面の(pt.x, pt.y)から表示されるてわけ。
関数Scrollを呼び出すたびに少しづつずれて表示される。
最後のpt.xとpt.yのインクメント/デクリメントをいじればスクロール方向や速度が変えられる。
メインループからでも適当な間隔で呼び出してもらえれば斜めスクロールすると
思うけど、実際試したわけではないのでサンプルね。俺も暇だな。
0026名無しさん@お腹いっぱい。
01/11/17 09:30ID:???切り替えたりして見かけのVRAM増やしてやるんかね
00271 ◆NVkNXezo
01/11/17 16:04ID:???これで心おきなく逝けます。
あ り が と う ご ざ い ま し た。
0028名無しさん@お腹いっぱい。
01/11/22 15:07ID:???|Д`) ダレモイナイ・・スルナラ イマノウチ
|⊂
|
♪ Å
♪ / \ ランタ タン
ヽ(´Д`;)ノ ランタ タン
( へ) ランタ ランタ
く タン
♪ Å
♪ / \ ランタ ランタ
ヽ(;´Д`)ノ ランタ タン
(へ ) ランタ タンタ
> タン
0029(ε・∀・) フクミミ ◆qepgf.W2
01/11/22 15:10ID:???0030名無しさん@お腹いっぱい。
01/11/22 15:10ID:???|Д`) ダレモイナイ・・センデンスルナラ イマノウチ
|⊂
|
♪ Å
♪ / \ ランタ タン
ヽ(´Д`;)ノ ランタ タン
( へ) ランタ ランタ
く タン
♪ Å
♪ / \ ランタ ランタ
ヽ(;´Д`)ノ ランタ タン
(へ ) ランタ タンタ
> タン
■ このスレッドは過去ログ倉庫に格納されています