HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0924
pumpkin指定した位置のカラーを取得8解決


pumpkin

リンク

2015/9/24(Thu) 19:52:46|NO.71909

横スクロールアクションゲームを作ろうと思ったのですが
地面などの当たり判定をする時、普通にマップチップ関係で当たり判定するよりは
「キャラの足元の位置がカラー○○(地面の色)の時、地面に足がついてる」のように、色を使った判定の方が複雑じゃないし、横スクロールの場合は特に簡単にできると思ったのですが…

色を取得する命令とかないですかね…?



この記事に返信する


tds12

リンク

2015/9/24(Thu) 20:14:30|NO.71910

pgetですか。



kanamaru

リンク

2015/9/24(Thu) 20:29:56|NO.71911

pgetですね。
しかし、アクションゲームは速度が要求されます。
vramを使った高速pgetを使うべきでしょう。
調べればすぐに出てくるので参考サイトは割愛します。



スペース

リンク

2015/9/24(Thu) 20:46:58|NO.71912

「少し便利になるモジュール」にvram版pgetがあります。
http://hsp.tv/play/pforum.php?mode=all&num=71504



暇人

リンク

2015/9/24(Thu) 21:04:36|NO.71913

色判定による地面判定 改良お願いします!!
http://hsp.tv/play/pforum.php?mode=all&num=70030

NO.70201のモジュールで一通りの処理は出来てる(地面と通過できるかどうかの処理だけ)
どの程度の精度(判定後の処理含む)を求めるかで複雑さは変わる
マップチップ単位かどうかは、あまり関係ない



k

リンク

2015/9/24(Thu) 21:16:30|NO.71914

マップチップで判定、キャラクタ同士で判定、vram版pgetで判定
それぞれメリット、デメリットがあるので併用してもいいかと思います。



dim map,10,10 map(0,0)=1,1,1,1,1,1,1,1,1,1 map(0,1)=1,0,0,0,0,0,0,0,0,1 map(0,2)=1,0,0,0,0,0,0,0,0,1 map(0,3)=1,1,0,0,0,1,0,0,0,1 map(0,4)=1,0,0,0,0,1,1,0,0,1 map(0,5)=1,0,0,0,0,0,0,0,0,1 map(0,6)=1,0,0,0,0,0,0,1,0,1 map(0,7)=1,1,0,0,0,0,1,0,1,1 map(0,8)=1,0,1,0,0,1,0,0,0,1 map(0,9)=1,1,1,1,1,1,1,1,1,1 color 0,0,0 boxf x=100:y=100:mysize=30:boxsize=40: repeat ax=0 stick sk,5 if sk&4 : ax=4 if sk&1 : ax=-4 if sk&16 : if skf=0 : ay=-14 : skf=1 ay++ y+=ay gosub *hantei if aa>0 { if ay>=0 { y=bby*boxsize-mysize-1:ay=0:skf=0} else {y=aay*boxsize+boxsize:ay=0} } x+=ax gosub *hantei if aa>0 { if ax>=0 { x=bbx*boxsize-mysize-1} else {x=aax*boxsize+boxsize} } redraw 0 color 0,0,0 boxf color 255,255,255 repeat 10 yy=cnt repeat 10 xx=cnt if map(xx,yy)=1 : boxf xx*boxsize,yy*boxsize,xx*boxsize+boxsize-2,yy*boxsize+boxsize-2 loop loop color 255,0,0 boxf x,y,x+mysize,y+mysize redraw 1 await 17 loop *hantei aax=x/boxsize bbx=(x+mysize)/boxsize aay=y/boxsize bby=(y+mysize)/boxsize aa=map(aax,aay)+map(bbx,aay)+map(aax,bby)+map(bbx,bby) return



pumpkin

リンク

2015/9/26(Sat) 08:12:12|NO.71970

すみません、知識が乏しい自分には難しかったようで…

#module "mod_vpx"//VRAMのモジュール
#deffunc VRAMset mref vramA,66 winx=ginfo_winx+(ginfo_sx-ginfo_winx) //サイズ可変ウィンドウに対応 winym=ginfo_winy-1+(ginfo_sy-ginfo_winy) //一番上のライン winx2=((winx*3+3)&-4) //VRAM横1ラインのサイズ vramptr=varptr(vramA) return #define global vpxget(%1=0, %2=0) p@mod_vpx=(winym@mod_vpx-(%2))*winx2@mod_vpx+(%1)*3 #define global ctype vpxset(%1=0) peek(vramA@mod_vpx,p@mod_vpx+(%1)) //おまけ //vpxrgb x,y でvpx_rgbに24ビットで色が返る //色毎のデータはvpx_r、vpx_g、vpx_bで取得 #define global vpxrgb(%1=0, %2=0) memcpy rgb@mod_vpx,vramA@mod_vpx,3,0,(winym@mod_vpx-(%2))*winx2@mod_vpx+(%1)*3 #define global vpx_rgb (rgb@mod_vpx) #define global vpx_r ((rgb@mod_vpx>>16)) #define global vpx_g ((rgb@mod_vpx>>8)&$ff) #define global vpx_b (rgb@mod_vpx&$ff) #global

スペースさんの「少し便利になるモジュール」をそのままコピペしたのがこれなんですが
これをスプリクトの一番初めに書いておけば、その後のpgetは高速になるということですか?
いろいろ試しても、いまいち使い方が分からないのですが…



スペース

リンク

2015/9/26(Sat) 12:41:44|NO.71972


Screen 0,500,500//画面を初期化。必須ではない VRAMset//モジュールを初期化 randomize:Color rnd(256),rnd(256),rnd(256):boxf//適当に画面を塗ってみる。 vpxrgb 10,10//取得する座標を指定 Dialog "R:"+vpx_r+",G:"+vpx_g+",B:"+vpx_b+""//色を取得 //もう1パターン vpxget 10,10//座標指定 Dialog "R:"+vpxset(2)+",G:"+vpxset(1)+",B:"+vpxset(0)+""//色を取得
このように使います。
このプログラムの最初にモジュールを書いてください。



pumpkin

リンク

2015/9/26(Sat) 18:13:24|NO.71976

ありがとうございます。普段モジュールなど全く使わないので、さっぱりなんですよね…
理解できないのは勉強不足なせいなのか…難しいです



ONION software Copyright 1997-2023(c) All rights reserved.