透過画像 セーブ・ロード(質問掲示板

投稿: 002 1  mini ugonight 投稿:2012/01/27 21:23:27(最新:2012/02/05 12:36:05)
画面を暗くするテスト - 【2DRPG】
あのゲームのスクリプトで
case speakWithSelect(16,"黒中空_100","黒中空_90","黒中空_80","黒中空_70","黒中空_50","黒_90","黒_80","黒_70","黒_50","橙_70","橙_50","青_70","青_50","紺_70","紺_50","元に戻す",
    "どの透過背景にしますか?")
  when 0
    setVariable("TEXT", "黒中空_100")
    setVariable("BGM", 37104)
    setVariable("PCT", 104560)
  when 1
    setVariable("TEXT", "黒中空_90")
    setVariable("BGM", 37104)
    setVariable("PCT", 104574)
  when 2
    setVariable("TEXT", "黒中空_80")
    setVariable("BGM", 37104)
    setVariable("PCT", 104581)
  when 3
    setVariable("TEXT", "黒中空_70")
    setVariable("BGM", 37104)
    setVariable("PCT", 104588)
  when 4
    setVariable("TEXT", "黒中空_50")
    setVariable("BGM", 37104)
    setVariable("PCT", 104595)
  when 5
    setVariable("TEXT", "黒_90")
    setVariable("BGM", 37104)
    setVariable("PCT", 104602)
  when 6
    setVariable("TEXT", "黒_80")
    setVariable("BGM", 37104)
    setVariable("PCT", 104609)
  when 7
    setVariable("TEXT", "黒_70")
    setVariable("BGM", 37104)
    setVariable("PCT", 104616)
  when 8
    setVariable("TEXT", "黒_50")
    setVariable("BGM", 37104)
    setVariable("PCT", 104623)
  when 9
    setVariable("TEXT", "橙_70")
    setVariable("BGM", 82)
    setVariable("PCT", 104631)
  when 10
    setVariable("TEXT", "橙_50")
    setVariable("BGM", 82)
    setVariable("PCT", 104638)
  when 11
    setVariable("TEXT", "青_70")
    setVariable("BGM", 78)
    setVariable("PCT", 104898)
  when 12
    setVariable("TEXT", "青_50")
    setVariable("BGM", 78)
    setVariable("PCT", 104905)
  when 13
    setVariable("TEXT", "紺_70")
    setVariable("BGM", 78)
    setVariable("PCT", 104914)
  when 14
    setVariable("TEXT", "紺_50")
    setVariable("BGM", 78)
    setVariable("PCT", 104921)
  when 15
    setVariable("TEXT", "なし")
    setVariable("BGM", 42)
    setVariable("PCT", null)
end

#おじさん「さぁ!これからマジックがはじまるよぉぉぉぉ」
fadeOut(0, 0, 0)
deleteTextAll()
textID = createText(100, 0, 200, 30)
setText(textID, "透過背景:",getVariable("TEXT"))
stopBGM()
playBGM(getVariable("BGM"))
deleteAllSprite()
setCanvasVisible(true)
s = createSprite(getVariable("PCT"))
setSpriteRect(s,0,0,512,384, 0,0,512,384)
drawCanvas()
waitTime(1000)
fadeIn()

という感じで、画像の切り替えしているのですが
開始スクリプトに
#おじさん「さぁ!これからマジックがはじまるよぉぉぉぉ」
deleteAllSprite()
setCanvasVisible(true)
s = createSprite(getVariable("PCT"))
setSpriteRect(s,0,0,512,384, 0,0,512,384)
drawCanvas()

と書いても、セーブ・ロードしても透過画像が消えてしまいます。
で、ためしにspeak(getVariable("PCT"))と入力してみたらnullと出ました、なぜでしょうか…?

コメントする

コメントするには、ログインする必要があります。

コメント一覧

002 1  mini ugonight(投稿日:2012/02/05 12:36, 履歴)
これですか…
一枚絵


黒い画面


なるほどです~
User icon mini 退会したユーザー(投稿日:2012/02/05 12:10, 履歴)
同じマップ上だったら、こんな方法も。
def darkwarp(x, y)
  fadeOut(0, 0, 0);  warpEvent("playerCharacterEvent", x, y)
  showImage(9404);  fadeIn()
  moveCamera(true, getPlayerPosX(), getPlayerPosY())
  fadeOut(0, 0, 0);  hideImage();  fadeIn()
end
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/01/29 08:49, 履歴)
同じマップ上の場合や、
続けて前景を表示するマップへの移動の場合は
changeSprite関数を呼びなおす動作のほうが
良さそうですね。
002 1  mini ugonight(投稿日:2012/01/29 03:02, 履歴)
あの…ワープのところは自動開始までの時間がかかってしまうので元のほうが望ましいかと思われます。

せっかく教えてもらったのですが、そっちでいっちゃいます。
すみません><
002 1  mini ugonight(投稿日:2012/01/29 01:44, 履歴)
なるほど~よくわかりました。ありがとうございます
裏技級ですねw
同じマップ上ではやらないほうがいいですよね?
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/01/29 00:21, 履歴)
ワープする前のマップで
そのスクリプトを実行しておくことで
表示状態が初期化されますので

別のマップに移動した後、
別のマップの自動実行スクリプトが
実行されるようになると思います
002 1  mini ugonight(投稿日:2012/01/29 00:02, 履歴)
ォオー!!(゚д゚屮)屮 わかりやすい解説ありがとうございました
じゃあ、今までワープするところを
#画面を暗くする
setCanvasVisible(true)
s = createSprite(104588)
setSpriteRect(s, 0, 0, 512, 384, 0, 0, 512, 384)
drawCanvas()

としていたので、それを消して
  deleteAllSprite()
  setCanvasVisible(false)

を入れればおkですよね?

Cdv30200 aoi icon mini aoihikawa(投稿日:2012/01/28 23:22, 履歴)
まずスクリプトは以下の通り


開始スクリプト
def changeSprite()
  deleteAllSprite() 
  setCanvasVisible(true)
  pct = 104560 #黒中空_100
  s = createSprite(pct) 
  setSpriteRect(s,0,0,512,384, 0,0,512,384) 
  drawCanvas()
end


自動実行イベント:実行条件「!(getCanvasVisible())」
changeSprite()


他のマップへ移動するイベント
  deleteAllSprite()
  setCanvasVisible(false)



こうすることで、スクリプトの流れは
次のようになります。

  • 開始スクリプト changeSprite()ユーザ関数が作られる
  なお、ユーザ関数の作成時は関数の内容は実行されない

  • マップを移動 自動実行イベントの開始判定

  • 前景が表示できる状態になっていないため
  changeSprite()関数を呼び出す処理が実行される

  • 開始スクリプトのchangeSprite()関数に入る
  前景画像が表示される

  • セーブ/ロードする

  • マップロード完了後、自動実行イベントの開始判定

  • 前景が表示できる状態は保存されないため
  changeSprite()関数を呼び出す処理が実行される

  • 開始スクリプトのchangeSprite()関数に入る
  前景画像が表示される

  • 他のマップへ移動するイベントで
  前景が表示できる状態を解除する



なお、関数の引数を利用することで
さらに利便性を上げることも可能です

def changeSprite(no)
  deleteAllSprite() 
  setCanvasVisible(true)
  
  #引数の値によって分岐
  pct = null #なし
  case no
  when 0
    pct = 104560 #黒中空_100
  when 1 
    pct = 104574 #黒中空_90 
  when 2 
    pct = 104581 #黒中空_80 
  when 3 
    pct = 104588 #黒中空_70 
  end 
  
  s = createSprite(pct) 
  setSpriteRect(s,0,0,512,384, 0,0,512,384) 
  drawCanvas()
end


自動実行イベント:実行条件「!(getCanvasVisible())」
changeSprite(1) #黒中空_90を表示する
002 1  mini ugonight(投稿日:2012/01/28 00:09, 履歴)
やっぱりそうなっちゃいますか…
とりあえずテスクエは常時暗くするので開始スクリプトに描写することを書けばおkですよね

ありがとうございました
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/01/27 23:13, 履歴)
現在、「ロードしたときに実行される」というイベントはありません。
そのため、セーブ・ロードを行ったときに、
再度描画処理を実行するためには
工夫が必要になってきます。

「def文」については一旦保留にして、
類似の内容が記載されております
こちらの記事をご確認頂けましたら幸です。
002 1  mini ugonight(投稿日:2012/01/27 22:49, 履歴)
ありがとうございます

(´ε`;)ウーン…
じゃあ、ロードしたときに、変数を取得してから読み込んだ値をセットしてる感じですか…

def文をどこにどんなふうに書いたらいいかよくわからないのでよかったら教えていただけますか?
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/01/27 21:58, 履歴)
スクリプトの流れは

開始スクリプト→イベントスクリプトの順で流れます。

今回のスクリプトの構成の場合、
「PCT」に値をセットしているのはイベントスクリプトの中なので
開始スクリプトの段階では「PCT」に値が入っておらず
結果nullとなります。

イベントスクリプトから、開始スクリプトに戻す場合は
ユーザ関数「def文」を利用して関数として定義しておき、
イベントスクリプトから定義した関数を呼び出すようにします。