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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1105
まぁしぃHSP 透過処理 不明3解決


まぁしぃ

リンク

2011/11/5(Sat) 04:37:41|NO.42810

今横向きのシューティングゲームを作成しているのですが、
なぜか自機だけが透過処理されません;;
gmode 2 を入れればできると思っていたのですが
どこに入れてもできません;;
どうしたらいいでしょうか;;


////////////////////////////////////////////////////////////////////
; オリジナル版

#packopt name"シューティング"
#epack "kyara2.bmp"
#epack "n_back01.bmp"


celload "kyara2.bmp",2 ;画像ロード
csx=40 :csy=40
celdiv 2,csx,csy ;画像素材分割サイズ

wxs=760 :wys=400
screen 0,wxs,wys ;画面の大きさ


*start
title "シューティング"
pos 0,0 :picload"n_back01.bmp",1
font "MS 明朝",30,1
color 0,153,255
pos 360,90 :mes"シューティングゲーム"
pos 360,130 :mes"スペースキーでスタート"
sysfont 1

stg = 0
gmode 2
gsel 0,1
gosub *pse


*nextstg

gosub *clr
a=stg+1 :a="STAGE "+a
pos wxs/2-40,wys/2-16 :mes a
title a :wait 150

;----背景----

scr_x = 0
scr_y = 0

;----自機初期設定----

x = 20 //スタート場所x
y = wys/2-20 //スタート場所y

;----弾初期設定----

dim tama ;配列変数名: tama
dim tama_x ;配列変数名: tama_x
dim tama_y ;配列変数名: tama_y

;----敵機初期設定----

dim teki,20
dim teki_x,20
dim teki_y,20


*main

//操作
stick key,31
if key & 1:x-5 ;カーソルキー左(←)
if key & 2:y-5 ;カーソルキー上(↑)
if key & 4:x+5 ;カーソルキー右(→)
if key & 8:y+5 ;カーソルキー下(↓)
if key & 128 : end ;キー Esc 終了

//スペースキーで弾を撃つ
if key & 16 {
if tama(cnt) = 0 {
tama(cnt) = 1
tama_x(cnt) = (x + 20)
tama_y(cnt) = y
}
}

pos 0,0
picload"neta2.bmp",1
pos x,y :celput 2,0

if x < 0 :x = 0
if x > 720:x = 720
if y < 0 :y = 0
if y > 360 :y =360

//敵出現
time++
if ( time \ 10 ) = 0{
repeat 20
if teki(cnt) = 0{
teki(cnt) = 1
teki_x(cnt) = 800
teki_y(cnt) = rnd(361)
teki_hp(cnt) = 10
break
}
loop
}

//敵の処理
repeat 20
if teki_x < -40 :teki(cnt) = 0
if teki(cnt) = 1{
teki_x(cnt)-7
pos teki_x,teki_y :celput 2,1
}
loop

//当たり判定
if teki(cnt) = 1
if shot = 1
if ( ( (tama_x-10) > (teki_x+10) && (tama_x-10) < (teki_x+10) + 20 ) || ( (teki_x+10) > (tama_x-10) && (teki_x+10) < (tama_x-10) + 20 )){
if ( ( tama_y > (teki_y-10) && tama_y < (teki_y-10) + 20 ) || ( (teki_y-10) > tama_y && (teki_y-10) < tama_y + 20 )){
teki(cnt) = 0
tama(cnt) = 0
bakuha(cnt) = 1
shot = 0
}
}


if teki(cnt) = 1
if ( ( teki_x > x && teki_x < x + 40 ) || ( x > teki_x && x < teki_x + 40 )){
if ( ( teki_y > y && teki_y < y + 40 ) || ( y > teki_y && y < teki_y + 40 )){
jiki(cnt)--
teki(cnt) = 0
}
}


//爆破モーション
if bakuha = 1{
pos teki_x,teki_y :celput 2,3
bakuha = 2
}
if bakuha = 2{
pos teki_x,teki_y :celput 2,4
bakuha = 3
}
if bakuha = 3{
pos teki_x,teki_y :celput 2,5
bakuha = 0
}



//現在時間表示
pos 540,370
t1=gettime(4)
t2=gettime(5)
t3=gettime(6)
color 0,255,204
mes "現在時刻 "+t1+" : "+t2+" : "+t3+"

//弾の処理

if tama(cnt) > 0{
tama_x(cnt)+=20
pos tama_x,tama_y :celput 2,2
if tama_x(cnt) > 760 {
tama(cnt) = 0
}
}

//自機
if jiki < 0{
end
}


redraw 1
wait 1
redraw 0
goto *main

; ----サブルーチン----
*clr
color 0,0,0 :boxf 0,0,wxs,wys
color 255,255,255 :return
*pse
wait 1 :stick ky,0 :if ky!16 :goto *pse
return



この記事に返信する


まぁしぃ

リンク

2011/11/5(Sat) 04:42:14|NO.42811

長くなって申し訳ないですが、よろしくお願いします;;
さっぱりわからなくなって、完全に詰まってしまいました;;
ヒントでもかまいません;;



玄冬

リンク

2011/11/5(Sat) 09:43:19|NO.42814

まず掲示板の注意事項のコピペから
1.不要部分の多い長いスクリプトの投稿は ご遠慮ください。
3.スクリプトは小文字の
で囲んでください。
celload "kyara2.bmp",2 ;画像ロード
csx=40 :csy=40
celdiv 2,csx,csy ;画像素材分割サイズ

wxs=760 :wys=400
screen 0,wxs,wys ;画面の大きさ


gmode 2
gsel 0,1

;----自機初期設定----

x = 20 			;スタート場所x
y = wys/2-20 	;スタート場所y

*main

//操作
	stick key,31
	if key & 1:x-5 ;カーソルキー左(←)
	if key & 2:y-5 ;カーソルキー上(↑)
	if key & 4:x+5 ;カーソルキー右(→)
	if key & 8:y+5 ;カーソルキー下(↓)
	if key & 128 : end ;キー Esc 終了
	
	pos 0,0
	color $80, $80, $80:boxf//picload"neta2.bmp",1
	pos x,y :celput 2,0

	if x < 0 :x = 0
	if x > 720:x = 720
	if y < 0 :y = 0
	if y > 360 :y =360

	redraw 1
	wait 1

	redraw 0
goto *main
少なくても、ここまでは削れます。
自キャラの表示時の透過の不具合に
敵キャラの表示や当たり判定が
不要なことくらいは自分で
判断できてほしいです。

それから、注意事項には記載されていませんが、
・スクリプトにはタブなどでインデント(段)をつけ、見やすくする。
・別ファイル(画像や音楽など)を必要とする部分は添付するか、代替手段に書き換える。

など質問者が答えやすいように配慮をしていくと良いと思われます。

私は特に気にしませんけど、
こういうことをしていないだけで、回答もらえなかったり、
怒られたりすることもあるので、お気をつけください。

さて、ご質問の件ですが、
まぁ別の部分が干渉している可能性も考慮して
↑のスクリプトを一切削らず
(neta2.bmpとn_back01.bmpは今回無関係と判断してboxfで代替しました)
こちらで適当なkyara2.bmpという名前の画像を作って
試しましたが、透過されました。

考えられる原因としては、画像の方に問題があるということになります。
こちらでは、ご使用の画像を確認できないので推測になりますが
gcopyのモード2の説明にある
>モード1と同様の方法でコピーを行ないますが、 RGBがすべて0(完全な黒)のドットは透明色とみなされコピーされません。

というところでしょうか?
人間の目でみれば黒にしか見えなくても、
RGBがすべて0でなければHSPは透過しません。
一度、画像の透過する部分のRGBを確認してみてください。

それでも解決しない場合には、使っている画像自体を
upローダーに上げるなど、回答者が使える状態にして
実際に使ってみて、原因を探ることになると思います。



まぁしぃ

リンク

2011/11/7(Mon) 01:35:59|NO.42848

自機の部分だけRGBが0,0,0じゃなかったみたいです;
お手数かけて申し訳ないです;

以後気をつけます;

ありがとうございました><



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