|
|
2006/7/25(Tue) 10:12:54|NO.1549
hsp3で、画像を表示するときに、
元の画像の色を赤っぽくとか青っぽく変えて表示させことはできますか?
キャラの色を、タイプ別に色を変えて表示させたいんです。
HSP3のプラグインが少なくて、探してもわかりません。
gcopyぐらい高速で、
元の画像に色を変えたものを用意するとか以外の方法で
できる方法があったら教えてください。
|
|
2006/7/25(Tue) 10:51:09|NO.1550
かなり原始的ですが、pgetで色を取得し、その色を変更してpsetで上書きしてます。
ただし極端に色が変わるので、その色の濃淡しか出ませんが…
もし目の色だけ全て青にしたい場合などには別々の画像を用意するのが手っ取り早いでしょう。
screen 0,64*7,64,0 ;画面初期化
title "キャラを変える"
cls 4
color 255,255,255 ; |
circle 0,0,64,64 ; |
color 128,128,128 ;<|キャラ描画(64*64)
circle 16,16,24,32 ; |
circle 40,16,48,32 ; |
buffer 1,64,64,0 ;バッファー画面を用意
repeat 6 ;あと6つ作るので6回ループ
c=cnt
pos 0,0
gcopy 0,0,0,64,64 ;先ほどのキャラをコピー
x=0
repeat 64
y=0
repeat 64
pget x,y ;色を取得
;/条件分岐により色を変える
r=ginfo_r : g=ginfo_g : b=ginfo_b
if c=0 : color r,0,0
if c=1 : color r,g,0
if c=2 : color 0,g,0
if c=3 : color 0,g,b
if c=4 : color 0,0,b
if c=5 : color r,0,b
pset x,y ;描画
y+
loop
x+
loop
gsel 0,0 ;描画先を変更
pos c*64+64,0
gcopy 1,0,0,64,64 ;変更後のキャラをコピー
gsel 1,0
loop
|
|
2006/7/25(Tue) 14:06:00|NO.1555
考え方は I386さんと同じようなものですが
色減算コピーを使うことで、一応リアルタイム演算が可能です。
ただ、これでもgcopy3回分+アルファの処理時間がかかるので、
スピードを優先するなら この方法を使うにしても、
あらかじめバッファに色々な色の濃さのキャラクターを確保しておく方法
(元の画像の色違いを、計算で用意する)
・・・のほうが良さそうですね。(メモリは食いますが・・・)
screen 0,320,240,,0,0;メイン画面
screen 1,120,64,,320,0:title "元";キャラクター用バッファ
color 0,0,0:boxf 0,0,64,64
color 255,255,50:circle 0,0,64,64,1
color 128,50,0:pos 8,4:mes"へ へ\nの の\n ▼"
;↑↑↑キャラクター設定
screen 2,120,64,,320,100:title "減算色";減算色用バッファ
screen 3,120,64,,320,200:title "減算後";キャラクター色合成バッファ
; screen 1〜3 は、解説用『screen』としているが
;実際には画面に表示されない『buffer』を使う。
repeat 20
repeat 180
y=120.0+cos(cnt/4)*10
gsel 2: color 0,cnt,cnt :boxf 0,0,64,64
;↑赤っぽくするために、減算色は赤以外の色成分を上げる。
gsel 3:gmode 0:gcopy 1,0,0,64,64
;合成用バッファに、元のキャラクターをコピーしてから・・・
gmode 6,,,255:gcopy 2,0,0,64,64
;減算色を 色減算コピー。
;赤以外の色を減算するので、キャラは赤っぽくなる。
gsel 0:gmode 2
redraw 0
color 0,128,0:boxf 0,0,320,240
pos 128,y
gcopy 3,0,0,64,64
redraw 1
await 3
loop
loop
end
|
|
2006/7/25(Tue) 14:20:00|NO.1556
レスありがとうございます。
pset,pgetはスピードがちょっと遅いようでした。
かきしすさんの方法と似てるんですが、
一フレームで異なる色のキャラを大量に表示させる必要があるんです。
下のスクリプトでは、
「作業領域を塗りつぶす」->「元画像を作業領域にコピーする」->
「色を減算する」->「表示画面にコピーする」
の四つの公定がありますが、マスクを使うか何かして
これをもっと高速化できる方法かプラグインはないでしょうか?
#include "hspext.as"
cls 4:gmode 2,16,16
color 255,255,255
mes "●▲★ <-元の画像(これは変えたくない)"
mes " <-変換に使う領域は最小限にしたい"
repeat 1000
color 0:boxf 0,16,16,32
pos 0,16:gcopy 0,rnd(3)*16,0
pos 0,16:gfini 16,16:gfdec rnd(256),rnd(256),rnd(256)
pos rnd(640),rnd(400)+80:gcopy 0,0,16
loop
redraw:stop
|
|
2006/7/25(Tue) 18:13:32|NO.1560
すみません。
今ゆとりが無くなって、実験できないんですが、
HGIMG3を使って、2Dスプライトに対してライトを設定してみたらどうでしょう?
もしかしたら3Dポリゴンにしか有効じゃないかもしれないけど・・・
資料には、2Dに対しても3Dに対しても共通の命令が使用できるようなことが書いてあるんで。
もっとも、今現在gcopyを使う方法でかなり作成してたら
HGIMG3を使うとなると、描画系はほとんど作り直しになっちゃいますが。
|
|
2006/7/25(Tue) 18:51:29|NO.1561
こんばんは、トホホッティーです。
ボックス画像を加算コピーさせる方法はどうですか?
screen 0
cls 4
picload "gph1.bmp"
buffer 3
color 255,0,0
boxf 0,0,64,64
gsel 0
gmode 5,,,128 ;128を増やすとより赤くなります。
pos 0,0
gcopy 3,0,0,64,64
bmpsave "gph2.bmp"
end
|
|
2006/7/25(Tue) 19:29:33|NO.1562
あっ、これ以外の方法でしたね。
でも機能だけを追求するならこの方法でもいいのでは?
|
|
2006/7/25(Tue) 20:30:00|NO.1564
>>1556
redraw 0とredraw 1 を使えばある程度高速化できますが…
|
|
2006/7/25(Tue) 23:11:29|NO.1565
赤くするサンプルを書いてみました。
ごめんなさい、ジョークです(^^;
screen 0,200,200,0 : cls 4
pos 70,88
color 255,255,255
mes "元の画像"
color 0,0,0
gmode 4,200,200,100
buffer 1,200,200,0 : cls 4
randomize : bloodNum=rnd(40)+10
dim bloodSize,bloodNum
dim bloodPosX,bloodNum
dim bloodPosY,bloodNum
repeat bloodNum
bloodSize(cnt)=rnd(20)+3 : bloodPosX(cnt)=rnd(200) : bloodPosY(cnt)=-rnd(20)-10
loop
color 255,0,0
repeat 200
redraw 0
gsel 1,0
for n,0,bloodNum,1
circle bloodPosX(n),bloodPosY(n),bloodPosX(n)+bloodSize(n),bloodPosY(n)+bloodSize(n),1
bloodPosY(n)++
next
gsel 0,0 : pos 0,0 : gcopy 1,0,0,200,200
wait 10
redraw 1
loop
stop
|
|
2006/7/26(Wed) 02:00:04|NO.1567
Dripです。
わからんぽさん、こんにちは。
キャラクタの配色パターンをリアルタイムに変更して描画するのは、
用途に応じて様々なやり方が考えられます。
今回はそのうちのひとつとしてキャラクタの服、ヘアカラー、肌の色などを
リアルタイムに変更しながら描画するケースのサンプルを上げてみます。
http://briefcase.yahoo.co.jp/bc/hsp_dripsat/
-> HSP3:リアルタイ... (HSP3:リアルタイム配色パターン変更)
をダウンロードしてください。
この処理はかなり自由度の高い配色変更が行えますが、
処理的にはかなり遅いものになります。用途に合わせて自分なりに改造し、
速度の向上を目指してください。
|
|
2006/7/26(Wed) 10:15:00|NO.1570
プラグインを使用してもいいなら、方法があります。
hmm.dllを使って下さい(簡単に探せるのでDL場所はカットします)。
#include "hmm.as"
dginit ;プラグイン初期化
dgscreen 640,480,0,32 ;ウィンドウ作成
dgbuffer 3
dgloadfname "任意の画像ファイル",3
dggsel 0
*main
await 0
dgcolor 0,0,0,255:dgclear ;画面クリア(0,0,0の黒で)
dgcolor 255,128,128,255 ;←ここで色味を変える
dgpos (任意の表示X座標),(任意の表示Y座標)
dgrect (任意のコピーX開始点),(任意のコピーY開始点),(任意のコピーXサイズ),(任意のコピーYサイズ)
dgggcopy 3,0
dgredraw ;画面更新
goto *main
dgcolor 255,128,128,255で色味を変えられます。
ちなみにdgcolor 赤,緑,青,透明度の順です。
なお、元の画像の強くした色が暗い(たとえば0,0,255の画像で赤みをいくら強
くしても赤くならない)と色がうまく変わらないので注意して下さい。
その他の各種命令の詳しい内容はマニュアルを参照して下さい。
|
|
2006/8/1(Tue) 20:12:54|NO.1702
解決しましたか?
|
|
2006/8/1(Tue) 20:59:58|NO.1706
> 元の画像の色を赤っぽくとか青っぽく変えて表示させことはできますか?
> キャラの色を、タイプ別に色を変えて表示させたいんです。
ゲーム用の原始的な方法ですが…。
・あらかじめ色違いのキャラクターの画像を作っておく。
・パレットカラーを使う。
|
|