ボスの位置を表す赤い部分を自機が近づいたら薄くする計算式

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kai

ボスの位置を表す赤い部分を自機が近づいたら薄くする計算式

#1

投稿記事 by kai » 15年前

龍神録についてです。
添付した東方の画像なんですが、
これはボスのx軸の場所によって赤い画像も、同じx軸の場所に位置が動きます。
本題なんですが、
このボスの位置を表す赤い部分を自機が近づいたら薄くするようにしたいのですが、
計算が弱くて、どのような計算式を書けばいいのか分からなくて困ってます。
SetDrawBlendMode(DX_BLENDMODE_ALPHA,ここの計算式が分からない); //αブレンドする

boss.dxとch.xが関わってきて、
ボスのx軸と自機のx軸が一緒の位置ならばαブレンドの値は128くらいの薄さに。

中間の薄さ

ボスのx軸と自機のx軸の差が+-100以上ならばαブレンドの値は255。

みたいな感じにしたいのですが、出来ますでしょうか?
誰か分かる方がいましたら助けてください。よろしくお願いします。 画像

ひよこ

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#2

投稿記事 by ひよこ » 15年前

薄くするじゃなくて透明ってことですか?
透明だったらこんな感じでいいと思います。あくまでも参考に。
真ん中が一番薄くなるように勝手なこともしてます。(見た目が汚いと思います。
int x=ボスのx軸-自機のx軸;
int alpha=0;
if(x>0 x<100){
    if(x<=49){ 
        alpha=255-205/50*(x+1); 
    }
    if(x>=51){ 
        alpha=255-205/(x-1)*(50); 
    }
    if(x==50){ 
        alpha=40; 
    }
}
else
alpha=255;

SetDrawBlendMode(DX_BLENDMODE_ALPHA,alpha);//αブレンドする

ひよこ

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#3

投稿記事 by ひよこ » 15年前

こうすればきれいかもしれません。
if(x<=49){ 
       alpha=255-205/(x+1)*50; 
    }

kai

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#4

投稿記事 by kai » 15年前

ひよこさん、ありがとうございます。

ただ、これだと、自機がボスより右にいた場合、
薄くならないようですが 画像

ひよこ

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#5

投稿記事 by ひよこ » 15年前

すみません。コメント付けてませんでしたね。
if(x>0 x<100){//ボスのx軸-自機のx軸が0(ぴったし)より大きくて100(boss.x+100>自機)
未満だったらということです。
よく考えたら、-100のほうは作ってませんでした。すいません。(少し工夫すればできると思います。

ひよこ

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#6

投稿記事 by ひよこ » 15年前

薄くならないようですが
>>勝手に考えて、自機が真ん中?の50に来た時に一番薄くする処理になっていますので、
>>条件式や処理を逆にすればできると思います。

SooA

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#7

投稿記事 by SooA » 15年前

こんな感じかな。

alpha = 0 ;
gap = boss_X - mychar_X ;

if( gap < 0 )
gap = 100-( 100+gap ) ;

if( gap > 0 && gap <= 100 )
alpha = 255/100*gap ; 画像

kai

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#8

投稿記事 by kai » 15年前

ひよこさん、SooAさん、返答ありがとうございます。
SooAさんの方法で
if( gap > 100 )
alpha = 255;
を追加したらなんとかいけました。ありがとうございます。
私はてっきり、ひよこさんのおっしゃる通りに、+の値と-の値が出てしまうので、
絶対値を出してから計算するのかなと思ったのですが、
その計算をしなくても大丈夫なんですね。
勉強になりました。ありがとうございました。

追記:
if(gap < 0)
  gap = 100 - (100 + gap);
ここで絶対値を出してるんですね。なるほど。ありがとうございました。 画像

SooA

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#9

投稿記事 by SooA » 15年前

>を追加したらなんとかいけました
すみませんいい加減な事を書いてました…
他も訂正しときます。

alpha = 0 ;
gap = boss_X - mychar_X ;

if( gap < 0 )
gap *= -1 ;

if( gap > 0 && gap <= 100 )
alpha = 255/100*gap ;
else if( gap > 100 )
alpha = 255 ;

light

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#10

投稿記事 by light » 15年前

>>ひよこ

言ってることが間違いだらけです。

ひよこ

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#11

投稿記事 by ひよこ » 15年前

間違いが多いので新しい方法にしました。
真ん中(50)で255
それ以外は(x>0&&x<100)
薄くなっていくと思います。
int x=ボスのx軸-自機のx軸;
int alpha=0;
if(x<0)//マイナスだったらプラスに
x*=-1;
if(x>=0 x<=100){//+-100いないだったら
    if(x<=50){ 
       alpha=255+(x-50)*5; 
    }
    if(x>=51){ 
       alpha=255-(x-50)*5; 
    }
}
else
alpha=255;

SetDrawBlendMode(DX_BLENDMODE_ALPHA,alpha);//αブレンドする

SooA

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#12

投稿記事 by SooA » 15年前

最小α値を設ける場合も載せておきます。

gap = boss_X - mychar_X ;
alpha = 50 ; // 最小α

if( gap < 0 )
gap *= -1 ;

if( gap > 0 && gap <= 100 )
alpha += (255-alpha)/100*gap ;
else if( gap > 100 )
alpha = 255 ;


□ひよこさん
No:46262 のソースでは残念ながらミスがありますが、
以前に拝見した時のソースと比較すると、
「ソースの見やすさ」が上達していると思いますよ。
次は処理を簡潔にして短くできないか工夫してみましょう。

※約一年ほど前にソースの書き方に付いて
書かせてもらいました。別人だったらすみません。

ひよこ

Re:ボスの位置を表す赤い部分を自機が近づいたら薄くする方法

#13

投稿記事 by ひよこ » 15年前

SooAさんもしかして間違いというのは&&が抜けてるってことですよね?
直すとif(x>=0 && x<=100){//+-100いないだったらこうなると思います。

以前に拝見した時のソースと比較すると、
「ソースの見やすさ」が上達していると思いますよ。
次は処理を簡潔にして短くできないか工夫してみましょう。

>>ありがとうございます。
>>昔はすごい見にくいソースを書いてたひよこです。
>>上の自分のソースはelse文を使えばよさそうですね。

SooAさんのソースはちゃんと、左か右の端から真ん中まで行くとalphaが減っています。
わかりやすい処理ですね。

閉鎖

“C言語何でも質問掲示板” へ戻る