2020年8月29日土曜日

やっと終わったイベント

土壇場で1日延長とかなにがあった…。
さておき、ひたすらダルいイベントでしたねえ。迅鯨堀は結局失敗。E2乙Mマス堀を155回S勝利しても無理なんだから流石に無理です。集積さん南無…
Mマスはボスマス扱いではないので「あ号」の為にボスマス24周を取り直さないといけません、ここら辺も改善して欲しい所。

さて、今回はドロップが異常に偏りました。新規ドロップだとヘレナが2隻、有明が1隻のみ。グラーフ、ガングート、照月は早々に出てしまい既に最終改装済み。他には秋津洲が2隻きましたが、未改造では地上攻撃に使えないので育成は無理でした…嫁の秋津洲改はE2掘りで嫌と言うほどレベルが上がりましたが、又2隻目のヒューストンはどうしたら良いのやら。

酷いのは海防艦で石垣x6 八丈x4 福江x2 大東x2 対馬x1 日振x2 松輪x2 佐渡x2。
…石垣は今回のイベントが始まる前は居なかったんですけどねえ。ドロップ率は迅鯨以下のハズなのにどうしてこうなった。そして、これだけドロップしておきながら、春イベのように「海防艦を合成せよ」系のク〇任務が来ないかと怯えるわけですよ…

地味に注目するべき点はE2で未入手の提督に大和を配った事だと思うんですよね。坊ノ岬の主役が居ないと流石に盛り上がりに欠けるだろう的な。

半年分の新艦を投入しなければいけなかったとは言え、堀が多すぎてゲンナリ。1艦辺り50出撃、250戦闘程度で掘れたとしても、1戦闘は1分程度、掘り艦が5隻で1250戦闘で、掘りの戦闘だけで21時間かかりますからねえ(編成や移動、回復等でその数倍時間がかかる上に、出撃間にはクールタイムが必要)。例年なら海防艦くらいは秋刀魚祭りの通常海域に投入されるのですが、今年は秋刀魚祭りが無さそうとの噂(秋のパン祭りだとか)。秋の鰻祭りでした

そして、今回はこんなに長いイベントだったにも関わらず、初の中間突破率の発表が無いイベントとなりました。
…みんな様子見していたのがバレますからね。援軍無し甲突破者が40名程度しか出なかったという発表のみでした。序盤こそ派手にぶっ飛ばされる集積地さんや「病んでいる」迅鯨が話題になりましたが…笛吹けども踊らずという状況でしたからね。オフイベントが壊滅しているのだから、ゲームに本腰を入れてくれても良さそうなものなのにどうしてこうなった。
コロナの影響で発表できなかった…訳が無いですよね、前述の40名の発表も出来ているし、春のイベントも発表はしてましたし。

秋は不漁の秋刀魚の状況から秋刀魚漁をキャンセルして秋イベント投入も最悪考えられますが…正直秋イベント無しで、「ちゃんとテストプレイした」冬イベが着て欲しいものです。

2020年8月17日月曜日

Blender で未使用頂点グループ削除スクリプトを書いてみた

 …のですが、制作途中にもっとちゃんとしたスクリプトを公開している方が多数居る事に気づきまして…
まあ、雑なんですが、せっかく作ったので公開します。尚、2.7、2.8両対応。

# idle vg remover

import bpy

if bpy.context.mode == 'OBJECT':
    for obj in bpy.context.selected_objects:
        if obj.type == 'MESH':
            list_use = [False]*len(obj.vertex_groups)
            for vertex in obj.data.vertices:
                for group in vertex.groups:
                    idxGroup = group.group
                    list_use[idxGroup] = True
            idx = 0
            for vg in obj.vertex_groups:
                if not list_use[idx]:
                    obj.vertex_groups.remove(vg)
                idx = idx+1

使用方法はオブジェクトモードで該当するオブジェクトを選択して、スクリプト実行。
コレが

こうなる

動作の解説をすると
1.オブジェクトに所属する頂点グループの数だけ使用を検証するフラグリストを作る
2.全頂点に対して使用頂点グループのインデックスを調べ、見つかったインデックスのテーブルフラグを上げる
3.最終的にフラグが上がらなかった(=未使用)頂点グループを削除
…正直面白味も何もないコードですね。というか、なぜ標準でこの機能が無いんでしょうか?

2020年8月15日土曜日

イベントクリア


 甲乙甲乙乙甲丙にて11日に終了。
どう考えてもE6甲が一手足りなかった為、E6甲のラスダンを残してE5で有明掘り。
アシュアは水着スキンを全て入手して再休眠したし、今期は見るアニメも無いので、気合入れようと思ったのですが肩透かし。
結局友軍が着たらE6は一発攻略できました。
で、E7は乙にする意味が薄かったので丙で攻略。結局ラスダンはギミックを解かずにそのまま挑んで一発攻略でした。
去年の初夏のアンツィオさんと同じですね。アレもハンプティダンプティの殻を被ったまま攻略しましたし。
感想としては…ダルい。
過去で最も札が付くイベントだったそうですが…


  • 輸送ゲージ
ステージ1(1本)、ステージ2(2本)、ステージ5(1本)

  • 戦力ゲージ
ステージ1(1本)、ステージ2(2本)、ステージ3(1本)、ステージ4(1本)、ステージ5(1本)、ステージ6(1本)、ステージ7(3本)

  • ルート、スタート地点開放ギミック
ステージ1(1か所)、ステージ2(1か所)、ステージ3(2か所)、ステージ4(2か所)、ステージ5(2か所)、ステージ6(2か所)、ステージ7(3か所)

  • ボス弱体化ギミック(各1)
ステージ3、4、6、7

…輸送ゲージを8出撃、戦力ゲージを7出撃、ギミックを4出撃で計算すると…


170出撃!?
1.5か月あるし、1日4出撃すれば良いから楽勝だな!
…って、そんな訳あるかい!
攻略サイトを読むのは最低条件としても、全出撃を完遂し、ラスダンも一発攻略という前提。TASでもなければ無理。
札が多すぎて新米提督では完遂できないし、私のような高齢化に片足ツッこんでいる古参では息切れするしで、一体誰に向けて作ったイベントか判らない。
流石に通しデバッグくらいはしていると思うのですが、デバッガーさんはどんな艦隊で何出撃で攻略したんでしょう?
ざっと、1出撃5戦闘としても、攻略までに300出撃1500戦闘程が必要だと思うのですが。(1戦闘は約1分としても、それだけで25時間)
デバッガーさん達は疲労度無し、コンディション値常にマックスの環境くらいでプレーしているとは思うのですが、それでもこんな冗長なイベントにGoサインが出たのが謎です。
毎年「過去最大」のイベントを持ってきますが、面白さに寄与していない気がします。ドロップは確かに豪華なんですけど、徒労感をごまかし切れていないですね。

又、ステージ構成は前半が日本近海なのに後半がソロモン海という脈絡の無さ。ステージ1に至っては北海道です。察するに前半戦は本来春にやるハズだったイベントなのではないか?と思われますが…。
※追記 公式4コマの224話(20年10月)にてBepさんがノリ突っ込みしてますね
薄雲等、先行して制作した艦娘を登場させる為に所縁のあるイベントマップを出さざる得なかったとは言え流石に飛びすぎ。

10月の秋刀魚祭りを考えると、9月に再度イベント開催はあり得ない訳で、6月開始と8月開始の各3週間イベントで良かった気がするのですが…
恐らく、長いイベントを作るより短いイベントを作る方が難しいのでしょうね長くするだけなら、ギミック数を増やすなり、攻略ゲージを伸ばすなりするだけの作業です。
逆に短くするなら要点を絞りつつ、ゲーム性を損なわないように調整し、且つ攻略可能な突破率になるように計算しなくてはなりません。
近年、イベント期間の2週間ほどの延長は恒例になっていますが短期間イベントではそこまで延長できませんし。
ゲームの規模が大きくなりすぎて作業量が増えたのは判るのですが、根本のゲーム部分がダメになっている気がします。

さて、悪い部分ばかりを連ねましたがゲーム以外の部分は良い出来でした、なによりも音楽のデキは良かったです。
新艦もいろいろ居ましたね。まさか2020年にぽよよんろっく氏のキャラを拝めるとは。
次いで、前半戦。やたらナーバスなボスが多かったのですが、理由を調べてみると確かにね…という内容でした。
なんなら掘り下げれば良いのですが、雑に2個のイベントを接合しているので掘り下げがたりないような…
E3は又、海に穴が空いてますが、法則性有るんですかね?今後の展開に期待して良いのでしょうか?


笑ったと言えばコレ


今夏最も安心できないカットイン攻撃。いや、はいてますよ?
現在、有明は70周目くらいで取得し、迅鯨掘りに移行中です。
流石に今年は、アニメ発表→坊ノ岬→信濃実装で盛り返してくれると思ってたんですけどね。
昨今は涼月もお冬さんを忘れ始めていますし、ちょっと先行き不安ではあります。

2020年8月2日日曜日

Blender でアドオンを作ってみた その1

以前作った Blender 2.7 2.8 両対応スクリプト。
流石に毎回使うたびにソースをコピペするのが面倒なので、アドオン化してみたのですが…

roll_zero.py

import bpy

bl_info = {
    "name" : "Set Bone Roll Zero",
    "author" : "100H",
    "version" : (0,1),
    "blender" : (2, 79, 0),
    "location" : "armature > Bone Roll 0",
    "description" : "Set Bone Roll 0",
    "warning" : "",
    "wiki_url" : "",
    "tracker_url" : "",
    "category" : "Rigging"
}

class CSBRZ(bpy.types.Operator):

    bl_idname = "armature.sbrz"
    bl_label = "Set Bone Roll Zero"
    bl_description = "Set Bone Roll 0"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        for obj in bpy.context.selected_objects:
            if obj.type == 'ARMATURE':
                print(obj.name)
                for bone in obj.data.edit_bones:
                    print(bone.name)
                    bone.roll = 0
        return {'FINISHED'}

def menu_func(self, context):
    self.layout.operator("armature.sbrz")

def register():
    bpy.utils.register_module(__name__)
    bpy.types.VIEW3D_MT_armature_specials.append(menu_func)

def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.VIEW3D_MT_armature_specials.remove(menu_func)

if __name__ == "__main__":
    register()

ボーンロール0化
カテゴリー:リギング
出し方:アーマチュア編集画面で、スペシャルメニュー(ショートカットW)


pair_vg_maker.py

import bpy

bl_info = {
    "name" : "Pair Vertexgroup Maker",
    "author" : "100H",
    "version" : (0,1),
    "blender" : (2, 79, 0),
    "location" : "object > pair vg create",
    "description" : "Pair VG Create",
    "warning" : "",
    "wiki_url" : "",
    "tracker_url" : "",
    "category" : "Rigging"
}

class CPVGM(bpy.types.Operator):

    bl_idname = "armature.pvgm"
    bl_label = "Pair VG Maker"
    bl_description = "Pair VG Create"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):

        for obj in bpy.context.selected_objects:
            print(obj.name)

            if obj.type == 'MESH':
                list_add = []
                for vg in obj.vertex_groups:
                    pair_name = ''
                    length = len(vg.name)
                    if vg.name[length-2:] == '.L':
                        pair_name = vg.name[:length-1]+'R'
                    if vg.name[length-2:] == '.R':
                        pair_name = vg.name[:length-1]+'L'
                    if pair_name != '':
                        if not obj.vertex_groups.get(pair_name):
                            list_add.append(pair_name)

                for name_add in list_add:
                    print(name_add)
                    obj.vertex_groups.new(name = name_add)
        return {'FINISHED'}

def menu_func(self, context):
    self.layout.operator("armature.pvgm")

def register():
    bpy.utils.register_module(__name__)
    bpy.types.VIEW3D_MT_object_specials.append(menu_func)

def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.VIEW3D_MT_object_specials.remove(menu_func)

if __name__ == "__main__":
    register()

左右対面頂点グループ作成
カテゴリー:リギング
出し方:オブジェクト編集画面で、スペシャルメニュー(ショートカットW)



使い方は前述のページの通りなんですが…
2.7専用
なんで互換性が無いんですかね。実行部分に互換性があるのにUIで引っかかって動かないなんて…
今後は2.7系は作らない気がしますがげんなりです。

2020年7月25日土曜日

E6到達


  • イベントの話に入る前に

某「ろでお」の実物を知りたくてコンプティークの2016年6月号を Bookoff で購入…。
アマゾンでポチったわけなのですが、アマゾンだと数日後に届くと表示されているのに注文すると Bookoff 公式通販と同じ着日不定になってしまうのですね。
雑誌100円に対して送料が300円強で微妙にもったいないですけど、1冊だとポストに入れていってくれるので一人暮らしには助かる所。
で、ふと気づいたのですが…
コレって、公式には「緩やかなソーシャルで…」とかはぐらかしていた部分ですが、
角川から出している雑誌で明示してよかったんやら?
さておき、ヴェアーさんの資料がなかなかすばらしかったです。…というかそろそろ型録の3巻出ないんですかね?


  • で、イベントなんですけどね。

前半は緩かったです。
すでに公式バナーの後半戦がソロモン感アリアリだったので不安でしたが、増援を待っているとクリアできるボリュームでは無さそうだったので、できる範囲で出撃。
結果、こんな感じに

E1甲

E2乙

乙でしたが4桁集積地さんがお出迎え
ラストは大破したコマさんがフィニッシュ。南無。

E3甲
※何気に卯月はE3開始時Lv1.流石に舐め過ぎかと思ったけどクリアできてしまいました。

E4乙
…E4のラスダンだけは異次元でしたね。
乙でも救援が来なければどうにもならない難易度でした。
実は、ラスダンまでは支援艦隊なし、重巡なしの艦隊で攻略したのですが。
総じて、メイン以外の艦(量産と書いています)をどの程度育てているかで難易度が変わりますね。
ちなみに、私は予備でハイパーズと二航戦を7組以上、一航戦を2組、阿賀野型改を1セット持っています。


  • で、後半戦です。

毎度のソロモンですが、栗田、西村各艦隊がほぼ特効に入っていません。
又、三川がやや薄めですね。救援に来るんでしょうか?

E5は乙で攻略
甲、乙の差は結構あるようで、戦力ゲージはQとYに基地航空隊を分けた上で決戦支援無しでしたが、昼戦前に取り巻きが吹っ飛んで、ひたすら軽巡棲姫が殴られた挙句、夜戦で大破した上で探照灯まで炊いてくれるというサービスっぷり。
ボイスが壊れた怪談話みたいになっていました。
ニクラシヤー

輸送ゲージはこんな感じで、BマスとZマスに基地航空隊。尚、基地防空はジェット3隊を彩雲隊がけん引すれば先ずダメージを受けません。
Zマスはドロップが2隻あるので、攻略時にわざとドラム缶を載せずに攻略。
お陰で、1回の出撃でTP26(S勝利)、攻略回数最低28回という周回をしたのですが…
結局最後まで新規ドロップ無し、で少し続けて(というか1-6消化と並行して)30周目に昼戦ゴリラ事ヘレナさんGet。
ちなみに今イベント初の新規ドロップ艦です。有明は40周目くらいで諦めました。

そろそろ開始から1カ月ですが、正直「長い」ですね。E1の輸送からしてダルかったですし。

あと、恐らく今回からボスの艦種が正体バレバレになっています。
又、長らく禁じ手にしていた最終海域に新規ドロップ艦を入れてきました。難易度も相まって丁提督が増えているとか。
そして、E7甲はともかくE6甲。コレ、報酬が人権級だよ…今まで後段の甲には趣味のアイテム入れていたのにどうしたんだよ?
…コロナ前と開発が変わっているんじゃないか?って位方向転換していますね。
ドロップは既にビジュアルが表に出ていた薄雲等、半年分を一気に放出しなければいけないという事情から無理やり詰め込んだのかもしれませんが。

先行組の来援前甲突破者が40名ちょっと…うん、昔は突破者7名のイベントもありましたし。
※ちなみに25日現在パラオの上位500位の中に甲20提督は14名、その内最低一人は例の40人の一人らしいです
正直、今はゲームに時間を取られている場合ではなかったりするのですが、難易度落としますかねえ?

2020年7月12日日曜日

何気に続けていたアシュア

何気に6月末までコロナ休業があった為、続けていたのですが…


  • 先ずマブラブコラボイベント、シナリオ関係は非常に良い出来でした

やった事はないのですが、マブラブは進撃の巨人の元ネタになるほどの殺伐世界なわけでして…
ザックリ言えばスパロボ風の異世界共闘ロボット物になるのですが、お互い腹の探り合いもしますし、アシュア側は設定上「遠慮なく死ねる」為、マブラブ系の敵の光線で容赦なく蒸発するなどなかなかの緊張感でした。
あと、アシュア勢がマブラブ勢を「破廉恥な恰好」呼ばわりしていたのは笑いました。

…悪い点を書いてしまえば、シナリオの見直しが足りないのか文章の接続がオカシイ部分が散見される所と…コラボガチャですかね。
2週間のコラボイベントを更に前後編に分けて各1週間毎に違うコラボキャラのガチャを投入。
どう見ても、最初の週に課金してでもガチャを回し、後段は最低保証を使わないと入手は非現実的でした。
…ちなみに私は後段の御剣さんを入手しましたけど…
最早説明する気も起きませんが、非常に課金要求の強いイベントでしたね。


  • フル改造キャラも結構増え、ティーガーは★6ステージ3


このゲームのプレイヤーがどれだけアクティブかは解りませんが、ココまで育てた人は1万人居ないのではないでしょうか?
その割には使えないんですけどね、ティーガーさんのエース型(このキャラはバフが本体なので)。


  • 七夕イベント

恐らく直角から続く、アシュア正史イベントで、バレンタインデーの続編と思われる七夕イベント。
…バレンタイン時はやってないので自信がないですが。
7月7日から「スタート」する七夕イベントってどうよ?ってツッコミは置いておいて、落とし物の落とし主を探すお話。
記憶を共有する群体で戦い、見た目は女の子でも破壊されても替えの利く量産品という世界観を表すしんみりしたお話です。
兵器の擬人化がコレだけあっても生死観を直視する作品がほとんどない(というか、推しキャラのロストがセンシティブ過ぎる)世の中で、割と貴重な筋のお話です。
アシュアは白刃戦(近接格闘戦)を始め、擬人化したら何ができるのか?というテーマにある程度のポリシーがある気がします

で、悪かった点は…
1.雷電さんのキャラが掴めなかった。
とにかく休みが欲しいって言ってるし、バカキャラを自称しているのに丁寧口調かつ花火職人やってる繊細さを持っている。
どういうキャラなんですかね(未所持)。

2.所々話が飛んでる。
過去のイベントの話をしているのかもしれないのですが、アレ?そんな話あったっけ?みたいな知識を前提として話が展開する。

3.テンポが悪い。
翻訳さんはこの半年で大分進歩したとは思う…多分原文がそうだからだと思うのですが…
「私は」「私が」「私の」…と言った日本人にとってはしつこいとしか思えない文が多々ありまして「ドイツ人かよ」とツッコみそうでしたね。
ちなみに有名な少佐の演説(ドイツ語版)はこんな感じ

ich liebe den Vernichtungskrieg, ich liebe den Blitzkrieg
ich liebe den offensiven Krieg, ich liebe den defensiven Krieg.
ich liebe die Kesselschlacht, ich liebe es sie zu durchbrechen,
ich liebe Raumungen, ich liebe Sauberugsaktionen.

Ich liebe はグーグル先生によれば I am in love つまり「私は~が好きだ」となります。


4月末に復帰して以来、なんとなくプレーしてますが…怠さだけは変わりませんね。
水着スキンの実装までは続けようかと(現在スキンチケットが230ほど余っている)思っているのですが、うーんこのゲームいつまで持つのだろう?
コラボで一時売り上げを回復しましたが、現在急転落中でして、新規キャラに声充てできないのはコロナのせいだ…と毎日ログボ時に表示していますが、流石にそろそろ苦しいのでは?
ガチャも目に見えて渋くなった気が…
いや、52回引いてPUが出ないのは割と普通ですが、実は金レア(★3)がこの間1体しか出ていないのですよ(しかもダブり)。
金レアの排出率は全体で公称5%ですから、流石に渋いのではないかと。

ビリビリを運営とした中国版も作っているようですが、なんと作り直しています。
開発会社のエンバースもいつまでも2重開発を続けられないでしょうからいつかは統合すると思いますが…
シドニア版(日本版)は育成が非常に怠い代わりに、非レアキャラでも育てれば戦力になるのに対し、
ビリビリ版(中国版)はとにかくレアキャラが強く「多々買い」を強いられるようです。

大陸版に合わせて低レアキャラをナーフしたらそれまで膨大な時間をかけて育成したコアユーザーが離れますし、レアキャラにバフをかけたらゲームが崩壊します。
…ただ、強くなったら楽しくなるかと言うとそれもまた別問題。
序盤でもウザい敵のスキル「ドッペルゲンガー」「鉄壁」がありましたが、更にウザい敵が増えていく。
現在、廃墟編の半分、一部はBハードの奥地、空挺はノーマル、偵察はBノーマルと、恐らく中間層レベルに達しているハズなのですが…
後半に入ると面倒な敵が増えてプレー時間が増えるばかり。レアキャラ育成アイテムがドロップしますが、コレは更なる周回地獄の入り口でして…


  • じゃあどうすれば良いのさ?

1日5回(30分)程度の戦闘でデイリーが終わって育成もできるように調整するべきですね。
この間実装された復刻イベ「星屑の蒼き鷹」は7日で攻略する場合、1日あたりB偵察戦を全距離(19戦)しないといけなかったですし。
現在は七夕イベントのボックスガチャの為に空挺ノーマルを16周しました…つらい。

1日5戦にする代わり、1度行ったマップは「ノーリスク、ノーリターン」で無限に練習できるようにすれば、
攻略練習したい人はひたすら練習できる→攻略が終れば周回しないで済むという流れになるのでは。

各勲章を250個取る為に、これまで1日4時間程を拘束されていまして、コロナ時はそれでも良かったのですが、流石にそろそろ無理が出始めています。

2020年7月2日木曜日

Python+Kivy 備忘録 スライダー、テキストボックス連動編その3

…実行結果は前回から変わらないので載せないのですが…

コード

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.slider import Slider
from kivy.uix.floatlayout import FloatLayout

### Input Color Value
class SlPram(Slider):
    def on_touch_up(self,touch):
        self.parent.t.text = str(int(self.value))

class TxPram(TextInput):
    def on_text_validate(self):
        value = int(self.text)
        if value <= self.parent.max and value >= self.parent.min:
            self.parent.s.value = value
        else:
            self.text=str(int(self.parent.s.value))

class GridPram(GridLayout):
    def __init__(self,**kwargs):
        super(GridPram,self).__init__(**kwargs)
        self.SetUp()

    def SetUp(self):
        self.clear_widgets()

        self.cols=3

        self.min = 0
        self.max = 100

        self.l = Label(text='none',size_hint_x=1)
        self.s = SlPram(min=self.min, max=self.max, value=self.min,size_hint_x=7)
        self.t = TxPram(text=str(self.min),multiline=False,size_hint_x=2)

        self.add_widget(self.l)
        self.add_widget(self.s)
        self.add_widget(self.t)

    def SetName(self,name):
        self.l.text = name

    def GetValue(self):
        return int(self.parent.s.value)

    def SetRange(self,range_min,range_max):
        if range_max<range_min:
            self.min = range_max
            self.max = range_min
        else:
            self.min = range_min
            self.max = range_max

        self.s.min = self.min
        self.s.max = self.max
        self.s.value = self.min
        self.t.text=str(self.min)

class Display(BoxLayout):
    orientation='vertical'

    def __init__(self,**kwargs):
        super(Display,self).__init__(**kwargs)

        self.GridR = GridPram(size_hint_y=1)
        self.GridG = GridPram(size_hint_y=1)
        self.GridB = GridPram(size_hint_y=1)

        self.GridR.SetName('R')
        self.GridG.SetName('G')
        self.GridB.SetName('B')

        self.GridR.SetRange(0,255)
        self.GridG.SetRange(0,255)
        self.GridB.SetRange(255,0)

        self.add_widget(self.GridR)
        self.add_widget(self.GridG)
        self.add_widget(self.GridB)

class MainApp(App):
    def build(self):
        layout = Display()
        return layout

if __name__=='__main__':
    MainApp().run()


冗長な部分が気になって、まとめてみたのですが…
コレで動くって事は当初動かなかった理由は単純に BoxLayout のバグだったのでは?
モヤッとする解決ですねえ。