忍者ブログ
はじかきれんしゅうちょう いろいろ
Admin  +   Write
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

◆イメージマップ発展版。(基本版は以前の記事参照))
画像選択のボタンの出現する・しないを変数でコントロールしたい!
そんなお悩みに答えてくれるのがこちら、海外フォーラム!(地球が爆発するらしい)

とりあえずそんな感じの内容を自分用にした例を載せます。
変数は事前に指定しとかないとエラーになるのでどこかで先に書いておくとして、

init python:
    fav = 1#事前に指定

#普通のホットスポットのやつをですね
            hotspot (1011, 38, 55, 42) clicked Return("favrr")#帰るべ^ス

#ifの下にくぐらせます。
##→favという変数が1のときだけホットスポットが出ます。
        if fav == 1:#破壊されていなければ以下が出る?
            hotspot (1011, 38, 55, 42) clicked Return("favrr")#帰るべ^ス

あと、 imagemap:の直下の画像指定は最低限groundとhoverでもできるけど、
idleなるものを挟むと小回りが利きます。
・ground=ベース画像
・idle=ボタンが有効な時のみ出現&押していないとき状態
・hover=ボタンが有効な時&押しているとき状態

なお、多分方法はあるんだろうけど、イメージマップ+通常のshow(画像表示命令)
だとイメージマップが手前に来るのでshowで出した画像は隠れちゃいます。
何らかの方法でプライオリティをどうにかするか、(挫折しました※)
イメージマップ部分を透明にさせとくかで対応。

※zorderとかレイヤーユーザー指定(↓の2行)とかがあやしいと
思ったけどわかりませんでした。「zorderは整数を取ります。」そ、それで……???
define config.layers = [ 'master', 'transient', 'screens', 'overlay' ]
show moon onlayer user_layer


###メッチャコードきたなくてすみませんが以下抜粋です###
##参考です。このまま使うと存在しないラベルとかがいっぱいあるのでムリだろう###

label tanspart3:#探索パートナー結果いれ 
screen example_imagemapqq():
    imagemap:
        ground "b1_base.png"
        idle "b1_off.png"
        hover "b1_on.png"
        
        hotspot (700, 524, 103, 55) clicked Return("go home")#帰るべ^ス
        hotspot (814, 520, 103, 55) clicked Return("make")#帰るせいせい
        hotspot (927, 520, 103, 55) clicked Return("talk")#帰るかんない
        hotspot (5, 465, 521, 135) clicked Return("tuto")
        
        if fav == 1:#破壊されていなければ以下が出る?
            hotspot (1011, 38, 55, 42) clicked Return("favrr")#帰るべ^ス
        if fav == 2:#破壊されていなければ以下が出る?
            hotspot (1011, 87, 55, 42) clicked Return("favyy")#帰るせいせい
        if fav == 3:#破壊されていなければ以下が出る?
            hotspot (1011, 127, 55, 42) clicked Return("favgg")#帰るかんない
        if fav == 4:#破壊されていなければ以下が出る?
            hotspot (1011, 176, 55, 44) clicked Return("favbb")#帰るべ^ス
            
        if fav == 5:#破壊されていなければ以下が出る?
            hotspot (1011, 240, 55, 46) clicked Return("favoo")#帰るせいせい
        if fav == 6:#破壊されていなければ以下が出る?
            hotspot (1011, 290, 59, 46) clicked Return("favkk")#帰るかんない
        if fav == 7:#破壊されていなければ以下が出る?
            hotspot (1011, 339, 55, 42) clicked Return("favmm")#帰るせいせい
        if fav == 8:#破壊されていなければ以下が出る?
            hotspot (1011, 385, 55, 42) clicked Return("favpp")#帰るかんない
        
label exampleqq:
    
    call screen example_imagemapqq
    
    $ result = _return
    if result == "favrr":
#        e "You went homはなすe!"   
        jump favj
    elif result == "favyy":
#        e "You went homはなすe!"   
        jump favj
    elif result == "favgg":
#        e "You went homはなすe!"   
        jump favj
    elif result == "favbb":
#        e "You went homはなすe!"   
        jump favj       
        
    elif result == "favoo":
#        e "You went homはなすe!"   
        jump favj
    elif result == "favkk":
#        e "You went homはなすe!"   
        jump favj
    elif result == "favmm":
#        e "You went homはなすe!"   
        jump favj
    elif result == "favpp":
#        e "You went homはなすe!"   
        jump favj
    elif result == "go home":#ベースへ帰る
#        e "You went home!"
        jump fcbase
        
    elif result == "make":
#        e "You picked ちゅしゅるart!"
        jump startmake
#       jump start3
        
    elif result == "talk":
#        e "You went homはなすe!"  
        jump talk
        
       # jump start3
    elif result == "tuto":
        $ renpy.pause()
        jump tanken
        
    return
    
PR
■チュートリアルに書いてあるやつをちょっと改造。
(なお、これのほかのスクリーンはエラーが出てできませんでしたヒエー
チュートリアルをコピペしてもダメなのはなんか
どこかで事前の指定が抜けてるとかなのかなあ)

※「rr」のステータスという体で行きます。


#数値を事前に指定
default rr_hp = 15
default rr_hp_max = 100
default rr_lv = 1
default rr_pt = 0

##rrのステータス名前が「screen single_statrr?
screen single_statrr(name, hp, hp_max, lv, pt, xalign, yalign):
    frame:
        xalign xalign
        yalign yalign
        
        vbox:
            spacing 5
            hbox:
                text "[name!t]" min_width 160 color "#ab2121"
                text _(" Lv. [lv]")
            hbox:
                text "友好度" min_width 160
                text _(" [pt]")
                
            hbox:
                text _("EXP "):
                    min_width 30
                    yalign 0.5
                bar:
                    value AnimatedValue(hp, hp_max, 1.0)
                    xmaximum 130
                    ysize 26
                    
                text " [hp]/[hp_max]":
                    yalign 0.5
# This screen uses single_stat to display two stats at once.
screen statsrr():#←ラベル内で呼び出すときはこの名前。「statsrr
    use single_statrr(_("仮rr"), rr_hp, rr_hp_max, rr_lv, rr_pt, 0.55, 0.1)
#↑このuse~の行を増やすと何個かいっぺんに表示させられる。後ろ2つの数字がxy座標。
#「default rr_hp = 15」のような「事前に指定」の四行を別キャラの分も用意してコピペすると増やせる。指定していないものを呼び出すとエラーるので注意。

##rrここまで。↓実際のラベル内で


label start:
    show screen statsrr ##←rrステータスを表示
    with dissolve

    $ rr_hp = 15 #←数字を変えたり
    hide screen statsrr##←rrステータスを消す



〇タイトルの通り。
できればスクリーンの中でどうにかしたいけどもわからないので普通にラベルで飛びます…
前提としてCG4枚のレイアウトになってます。
なお、CGが表示されるところをラベルジャンプにすれば回想モードにも使えます。



 
image cg1 = "/cg1.png"
image cg2 = "/cg2.png"
image cg3 = "/cg3.png"
image cg4 = "/cg4.png"

label cgselbe: #前段階準備。
    $ quick_menu = False   #メッセージボックスを消す指令。
    hide cg1 #出てるCGを隠す。(雑)
    hide cg2
    hide cg3
    hide cg4
    
label cgsel: ##cgmode
screen example2_imagemap(): #「example2」が多分可変。
    imagemap:
        ground "cgoff.png" #ホバー前画像(全部オフの画像)
        hover "cgon.png"  #ホバー中画像(全部オンの画像)

#数字は(左端の位置, 上端の位置, ホットスポットの幅, ホットスポットの高さ)
        hotspot (138, 155, 346, 127) clicked Return("cgg1")
        hotspot (138, 329, 346, 126) clicked Return("cgg2")
        hotspot (562, 155, 346, 128) clicked Return("cgg3")
        hotspot (562, 329, 347, 127) clicked Return("cgg4")

#これはタイトルに戻るボタン        
        hotspot (841, 498, 179, 67) clicked Return("back")      
          

label example2: #「example2」が多分可変。
    
    call screen example2_imagemap #「example2」が多分可変。
    
    $ result = _return
    
    if result == "cgg1":
        $ quick_menu = False
        show cg1 #画像表示(定義は別のとこでしとく)
        $ renpy.pause() #クリックまち
        hide cg1 #けして、
        show cg2  #差分表示・
        $ renpy.pause() #またクリックまちして
        jump cgselbe #戻る・
        #e "You picked swimming!"

    elif result == "cgg2":
        $ quick_menu = False
        show cg2
        $ renpy.pause()
        jump cgselbe
 
    elif result == "cgg3":
        $ quick_menu = False
        show cg3
        $ renpy.pause()
        jump cgselbe
        #e "You picked art!"

    elif result == "cgg4":
        $ quick_menu = False
        show cg4
        $ renpy.pause()
        jump cgselbe
        #e "You picked art!"
        
    elif result == "go home":
        return
#        e "You went home!"

21/6/27追記

決定版とか抜かしてますがそんなことはなかった!
もっと強いカメックスがいるぞ!!

→別記事参照です。

以下は参考用に残しときます。




何回立ち絵の話するんだよ。
えっと、この度はイメージタグをつけてコンポジット指定差分を表示させることに
成功したので書きに来ました! これが決定版! になるはずです!
なお、「立ち絵差分顔面セット式」です。

何かというと、いつもの話者指定のとこの
define ur = Character('ウララ', color="#1b5182", image="aa")
↑これのimage="aa"がイメージタグです。

urが話者です。スクリプト上
   
ur "はじめまして、こんばんは。"
こういう感じになるアレです。

で、立ち絵の顔差分の指定スクリプトが(なんとなく私は別のrpyファイルに書いてます)
image aa 0 = im.Composite( #aaのあとに半角スペースを入れる!!
    (555, 1502), #ベースになる画像の縦横サイズです
    (0, 0), "/aa/aabase.png", #身体パーツ
    (0, 0), "/aa/aa000.png") #顔セットパーツ   座標指定
#       show aa 1 at top, smooth//このセットがでますの式

image aa  1 = im.Composite(
    (555, 1502), #ベースになる画像の縦横サイズです
    (0, 0), "/aa/aabase.png", #身体パーツ
    (0, 0), "/aa/aa001.png") #顔セットパーツ   
#     以降、顔差分の分だけ数字を増やして続けていきます。
これです。/image/aa/ となっているのは
imageフォルダの中にaaというフォルダを作って
そこに画像を入れていますという意味です。
(smoothについては
使わなかったら消してください。
前にこれを入れるといいらしいといわれていたアレです。
どっかに描いた気がするので「立ち絵スムーズ表示スクリプト」で検索。)


使う画像はこれ。立ち絵ベース画像(aabase.png)と顔差分(aa000.png、aa001.png)です。
ブログなので勝手にリサイズされますが、顔差分は横幅を変えないで
書き出しています。こうすると座標指定がいらないのです。

あとaaとかbbにしとくと次回以降顔差分指定rpyをコピペでできるんです~。
置換でベースサイズだけ変えればフォルダの中身の画像ファイルを差し替えるだけで
準備完了になっちゃうヨ! べんり!
 


そんで本文スクリプトを書きます。いろいろ中略ですが

    show aa 0  at top, smooth 
    ur "セリフそのいち!"
    ur 1 "セリフそのに!"

これでur 1がちゃんときいて顔がかわってくれますぞ~
注意は ur(半角スぺ)1(半角スぺ)"セリフ" ってことですね。
消すときは
    hide aa 
で全部消えてくれる♡ やったね♡
タイトル通りです。
ふつうの変数のIF式とpersisitentのIF式が違うみたいで
つまづいたのでメモります。


#前提として、シナリオの最後にクリアフラグ設置して踏むとこをつくっときます。
#ここを通るとクリアしたことになりますよー。
   $ persistent.finished = True





で、抜粋なんでよけいなスクリプトとかラベル名とか入ってますが


label stst:   
    stop music fadeout 2.0  
    if not persistent.finished: #エンドみてないなら
        jump story
    else:
        jump toba  
        
label toba:    
        
    scene bg06
    with fade 
menu:
    "予選まで飛ばす?"
    
    "はい":
        stop music fadeout 3.0
        jump qend
    "いいえ":
        jump story
label story:
#オープニングがはじまります。

label qend: 
#飛ばす?はい した先がここのラベルです。  

≪ 前のページ   *HOME*   次のページ ≫
ブログ内検索
このブログについて
ゲーム作りたい人のメモ。
講座というほどのものでもないおぼえがきです。
何か参考になるところがあればご自由にどうぞ。
ほぼ自分用なので、日本語いきあたりばったりでごめんなまし。

※ここに書いたことは全体的に
「本当はなんとかする方法があるかもしれないけど、私にはわからない」が多く…
あんまり仕組みを理解していないし誤解もあるかもしれません。
というわけで責任は負いません。ごめんなさい!

リンク:ゲーム作ってる本館
material by bee  /  web*citron
忍者ブログ [PR]