Adobe AIR で作った Android アプリの OpenSSL 脆弱性アラート解決法

先日 Google Play から 「Google Play warning: You are using a vulnerable version of OpenSSL」 ってメールが来て、デベロッパーコンソールへ見に行ったら「セキュリティ アラート アプリで使用中の OpenSSL のバージョンにセキュリティの脆弱性があります。」的なアラートが出ていてオイオイどないしたらえーねん状態だったのですが、解決できたのでメモります。

まず対象のアプリは Adobe AIR for Android で作ったものだったので、そのあたりでググったら、どうやら Adobe AIR SDK を 最新(この時は AIR21.0 以上)にアップすれば解決するってことらしいので、以下 Animate CC にそいつをぶっこむ手順です。

1.最新の Adobe AIR SDK をダウンロードする

↓から入手する。
Download Adobe AIR SDK

2.解凍した Adobe AIR SDK の内容一式をどっかにコピーする

Animate CC のメニュー「ヘルプ(H)」に「Adobe AIR SDK を管理(R)」ってのがあって、AIR20.0 が入ってる場所が確認できたので、そのとなりに AIR21.0 ってフォルダ作ってコピーしました。
具体的には
C:\Program Files\Adobe\Adobe Animate CC 2015\AIR21.0\
です。え?Mac?知るかっ!

3.コピーした SDK を選択できるようにする

Animate CC のメニュー「ヘルプ(H)」に「Adobe AIR SDK を管理(R)」を選択すると出てくるウィンドウで、さっきのフォルダを追加する。

4.ターゲットでコピーした SDK のバージョンを選択してパブリッシュ!

これで無事 OpenSSL 1.0.2f になりました!ヽ(=´▽`=)ノ
放置されてる ANEs に原因があったら終わるので、SDK の問題でほんと良かったと思いました。ε-(´∀`*)

おまけ

Google 先生のヘルプ「How to address OpenSSL vulnerabilities in your apps」では、「$ unzip -p YourApp.apk | strings | grep “OpenSSL”」ってやれば調べられるよイエイ!とか書いてありますがオイオイこちとら安定の Windows なんですけど!ってことで、私は以下のようにしてアプリ内で使われている OpenSSL のバージョンを調べました。

まず対象の apk ファイルを解凍します。
そのままだと解凍できないなら拡張子を .zip にしちゃってください。
んでコマンド プロンプト立ち上げて解凍したフォルダまで移動する。(dir とか cd コマンドだ!)
一番簡単なのは「cd[半角スペース]」って入力した後、コマンド プロンプトウィンドウに解凍したフォルダをドロップしちゃう方法です。
それで「cd C:\なんたらかんたら」と勝手に記述されるはずなので enter キーをッターーンて押せば移動できます。

そしたら「findstr」コマンドでファイル内検索します。
具体的には「findstr /s /m “OpenSSL” *.*」としました。
オプションの意味とかこのコマンドの使い方を知りたい時は「findstr /?」で、ッターーンだ!
UTF-8 には対応してないらしいけど、まぁ英字だしヒットはします。

今回の場合は「\lib\armeabi-v7a\libCore.so」がヒットしました。
それをエディターで開いて「OpenSSL」って検索したらたくさんヒットして、そのなかに「OpenSSL 1.0.0」とか書かれていたりしたので、こいつが悪いんだと思います。
上記の SDK アップ後はこれが「OpenSSL 1.0.2f」になりました。

これでめでたしめでたしです。

Posted in Adobe Animate, Adobe Flash | Leave a comment

ANE でアプリ内課金(In App Purchase)を Flash CC (Animate CC) で導入する手順

はいはいFlashは死にましたね。そーですね。
(とか書いてる間に Adobe Animate CC になったよ)
おかげで2016年にもなるとANEの使い方すら見つけ難い始末ですよ。
あっても Flash Builder での使い方とかばっかで意味わからんワー。
ってなわけで、自分で書きます。

■ やりたいこと
AIR for android で作ったアプリに課金機能を追加してジャブジャブ課金してもらう。

■ 使ったソフト
・ Adobe Flash Professional CC 2015

■ あまり参考にしてはいけないページ
Adobe AIR 用ネイティブ拡張の使用
http://help.adobe.com/ja_JP/air/build/WS597e5dadb9cc1e0253f7d2fc1311b491071-8000.html
「ANEの使い方」などと検索するといまだに上位に出てくるけど、一部の情報が古く既に不要となった手順なども含まれているという公式マニュアルとは思えないページ。

■ 一般的な ANE の使い方手順
1)ANE ファイルを用意する
GitHub とかから落とすなりなんなりする。

2)FlashでさっきのANEを登録。
1、2、3で完了だ。
ANE01

3)ActionScript でなんやかんやする。
まともなマニュアルやリファレンスが用意されてる ANE なんてこの世に存在しないけど頑張れ!

4)AIR でパブリッシュ!
おわり。
うわチョー簡単!上記公式マニュアルのクソっぷりが際立つ!

ただし、利用する ANE によっては上記以外に、なんたら-app.xml への追記なども行う必要があるぞ。
あと、ANE は AIR じゃないと使えないからパブリッシュのターゲットは AIR のやつを選ぼう。
Flash Player とのマルチプラットフォームの場合は条件付きコンパイルとか使ってコードも実行されないようにしないとダメだぞ。

■ 試してみた ANE
いずれも2016年1月時点でダウンロードしたものを使用。

・ Freshplanet の ANE-In-App-Purchase
おそらく最も利用されているであろう有名な ANE なので、当然動くものと思い実装してみるもパブリッシュ時にエラーを吐血する始末。
フォーラムでも同症状の人が質問しているが、もー3ヶ月ぐらい経ってるけど現時点でも回答なし。
自己解決はあきらめて次へ進んだ。

・ StudioPixMix の ANE-InAppPurchase
ちょっと試してみた ANE。
驚いたことにどうやらライセンスキー(パブリックキー)を設定する手段がないという ANE なので完全に使い物にならない。
これをもとに自分で作れる人向けなのか?それにしてはリファレンスまで用意してるのが謎…;

・ pozirk の AndroidInAppPurchase
Android のみ。ANE と swc のハイブリッドw

今回は消去法で pozirk の AndroidInAppPurchase を使用することに決定。
もーこの時点で不安しかない。

■ 具体的に実装手順
1)AndroidInAppPurchase のページから一式ダウンロードする。
https://github.com/pozirk/AndroidInAppPurchase
「Download ZIP」から落とせるよ。探せ。

2)必要なファイルをコピーする。
比較的親切な readme.md の指示に従い
「InAppPurchase.ane」と
「air\InAppPurchase\bin\InAppPurchase.swc」をflaファイルと同じ場所にコピー。
フォルダ構成は無視して2つともファイルだけ直に置けばOKだ。
それ以外はゴミだ捨てろ。

3)FlashでさっきのANEを登録。
上記の「1、2、3で完了だ」を2つ分やる。

4)なんたら-app.xml にアプリ内課金の権限(パーミッション)を追加。
権限の設定は「AIR for Android 設定」の「権限」タブでできるが、残念ながら課金権限のチェックボックスは用意されていない。
つまり自分で xml に追記する必要がある。
一度でもパブリッシュしていれば xml も勝手に生成されているはずなので、それを利用するが、その前に「権限」タブで「アプリケーション記述ファイルへの権限およびマニュフェストの追加を主導で管理します」にチェックを入れておかないと、毎回追記するはめになる。
ちなみにチェックを入れても権限とマニュフェスト周辺以外は引き続き更新してくれるので、毎回バージョンを書きなおすとかはしなくてもOKだ!

んで、追記する場所は <manifestAdditions> のなかということだけれど、具体的には…

<uses-permission android:name="android.permission.INTERNET"/>

とかの次でいいんじゃね?てきとーてきとー。
え?そんなのどこにもない?しるか!「権限」タブでチェック入れとけや!

んでそこに↓を追記する。

<uses-permission android:name="com.android.vending.BILLING" />
<application android:enabled="true">
<activity android:name="com.pozirk.payment.BillingActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" android:background="#30000000" />
</application>

あと <extensions> に <extensionID> を追加する必要があるけど、これは自動的におこなわれるはず。

5)ActionScript を書く!
ありがたいことに readme.md に例が記述されているので参考にする。

[サンプル準備中]

6)テストする
当たり前だけど Flash のプレビューとかでは Google アカウントと紐付いていないからエラーが出てテストにはならないよ。
実機でテストしませう。
ただし、開発者アカウントでインストールすると「出版社はこのアイテムを購入できません。」とかいうネイティブな日本語エラーが返ってくるだけなので、別のアカウントを使わないとテストにならない。
で、その別アカもテストユーザーとして登録しておかないと、ベータ版テストだろうと容赦なく課金されるので注意だ。
ちゃんとデベロッパーコンソールの「設定」>「アカウントの詳細」>「ライセンス テスト」でメアドを登録しておきませう。(2016年3月現在)
さすれば数時間後には効果が発揮され、テス垢で購入しようとすると「これはテスト用の注文です。課金は発生しません。」というメッセージが表示されるようになって課金テストし放題になるでござる。

7)公開する!
そして現実は甘くないことを実感するがいい!

Posted in Adobe Animate, Adobe Flash | Leave a comment

stencyl 3.3.2 での備忘録

Flash と Android(無課金)での動作確認によるものです。

  • Map タイプの Attribute を Hidden で使いたい場合は、利用前に set [Map] to (create new map) としないとエラーが出る。
  • Map タイプの Attribute に Stencyl (GUI) 上で設定された値は数値でも TEXT として処理される様子。(その後スクリプトにて Number 化すればOK)
  • Game Attribute の Map を for each [key] item in [map] しようとするとエラーが出る。(Actor の Map は無問題)
  • simple Physics で Enable Debug Drawing を ON  にすると Android の Publish は失敗する。
  • あたりまえだけど32pxタイルのシーンに16pxのタイルを使用すると表示がおかしくなる。
    症状はパブリッシュ先で異なる。(どちらにしろダメだけど)
  • Android だと広いシーンの読み込みにすんごい時間がかかる。
  • Android だと画面に多くのタイルを描画させると重くなる。
    例えば16px のタイルより 32px のタイルを使ったほうが結果的に画面内のタイル数が減り軽くなる。
  • 相変わらず、アクターのアニメーションフレームで異なるサイズに差し替えると、Origin Point が変化してしまう。(しかもリロードするまで表示に変化はない)
Posted in Adobe Flash, Stencyl | Leave a comment

常用漢字のテキストデータ

常用漢字のテキストデータが欲しいのに全然見つからなかったのでわざわざ作りました。
組み込みフォントで文字指定するときに便利です。
コピペしれ。
2010年の改定版対応


亜哀挨愛曖悪握圧扱宛嵐安案暗
以衣位囲医依委威為畏胃尉異移萎偉椅彙意違維慰遺緯域育一壱逸茨芋引印因咽姻員院淫陰飲隠韻
右宇羽雨唄鬱畝浦運雲
永泳英映栄営詠影鋭衛易疫益液駅悦越謁閲円延沿炎怨宴媛援園煙猿遠鉛塩演縁艶
汚王凹央応往押旺欧殴桜翁奥横岡屋億憶臆虞乙俺卸音恩温穏
下化火加可仮何花佳価果河苛科架夏家荷華菓貨渦過嫁暇禍靴寡歌箇稼課蚊牙瓦我画芽賀雅餓介回灰会快戒改怪拐悔海界皆械絵開階塊楷解潰壊懐諧貝外劾害崖涯街慨蓋該概骸垣柿各角拡革格核殻郭覚較隔閣確獲嚇穫学岳楽額顎掛潟括活喝渇割葛滑褐轄且株釜鎌刈干刊甘汗缶完肝官冠巻看陥乾勘患貫寒喚堪換敢棺款間閑勧寛幹感漢慣管関歓監緩憾還館環簡観韓艦鑑丸含岸岩玩眼頑顔願
企伎危机気岐希忌汽奇祈季紀軌既記起飢鬼帰基寄規亀喜幾揮期棋貴棄毀旗器畿輝機騎技宜偽欺義疑儀戯擬犠議菊吉喫詰却客脚逆虐九久及弓丘旧休吸朽臼求究泣急級糾宮救球給嗅窮牛去巨居拒拠挙虚許距魚御漁凶共叫狂京享供協況峡挟狭恐恭胸脅強教郷境橋矯鏡競響驚仰暁業凝曲局極玉巾斤均近金菌勤琴筋僅禁緊錦謹襟吟銀
区句苦駆具惧愚空偶遇隅串屈掘窟熊繰君訓勲薫軍郡群
兄刑形系径茎係型契計恵啓掲渓経蛍敬景軽傾携継詣慶憬稽憩警鶏芸迎鯨隙劇撃激桁欠穴血決結傑潔月犬件見券肩建研県倹兼剣拳軒健険圏堅検嫌献絹遣権憲賢謙鍵繭顕験懸元幻玄言弦限原現舷減源厳
己戸古呼固股虎孤弧故枯個庫湖雇誇鼓錮顧五互午呉後娯悟碁語誤護口工公勾孔功巧広甲交光向后好江考行坑孝抗攻更効幸拘肯侯厚恒洪皇紅荒郊香候校耕航貢降高康控梗黄喉慌港硬絞項溝鉱構綱酵稿興衡鋼講購乞号合拷剛傲豪克告谷刻国黒穀酷獄骨駒込頃今困昆恨根婚混痕紺魂墾懇
左佐沙査砂唆差詐鎖座挫才再災妻采砕宰栽彩採済祭斎細菜最裁債催塞歳載際埼在材剤財罪崎作削昨柵索策酢搾錯咲冊札刷刹拶殺察撮擦雑皿三山参桟蚕惨産傘散算酸賛残斬暫
士子支止氏仕史司四市矢旨死糸至伺志私使刺始姉枝祉肢姿思指施師恣紙脂視紫詞歯嗣試詩資飼誌雌摯賜諮示字寺次耳自似児事侍治持時滋慈辞磁餌璽鹿式識軸七叱失室疾執湿嫉漆質実芝写社車舎者射捨赦斜煮遮謝邪蛇尺借酌釈爵若弱寂手主守朱取狩首殊珠酒腫種趣寿受呪授需儒樹収囚州舟秀周宗拾秋臭修袖終羞習週就衆集愁酬醜蹴襲十汁充住柔重従渋銃獣縦叔祝宿淑粛縮塾熟出述術俊春瞬旬巡盾准殉純循順準潤遵処初所書庶暑署緒諸女如助序叙徐除小升少召匠床抄肖尚招承昇松沼昭宵将消症祥称笑唱商渉章紹訟勝掌晶焼焦硝粧詔証象傷奨照詳彰障憧衝賞償礁鐘上丈冗条状乗城浄剰常情場畳蒸縄壌嬢錠譲醸色拭食植殖飾触嘱織職辱尻心申伸臣芯身辛侵信津神唇娠振浸真針深紳進森診寝慎新審震薪親人刃仁尽迅甚陣尋腎
須図水吹垂炊帥粋衰推酔遂睡穂随髄枢崇数据杉裾寸
瀬是井世正生成西声制姓征性青斉政星牲省凄逝清盛婿晴勢聖誠精製誓静請整醒税夕斥石赤昔析席脊隻惜戚責跡積績籍切折拙窃接設雪摂節説舌絶千川仙占先宣専泉浅洗染扇栓旋船戦煎羨腺詮践箋銭潜線遷選薦繊鮮全前善然禅漸膳繕
狙阻祖租素措粗組疎訴塑遡礎双壮早争走奏相荘草送倉捜挿桑巣掃曹曽爽窓創喪痩葬装僧想層総遭槽踪操燥霜騒藻造像増憎蔵贈臓即束足促則息捉速側測俗族属賊続卒率存村孫尊損遜
他多汰打妥唾堕惰駄太対体耐待怠胎退帯泰堆袋逮替貸隊滞態戴大代台第題滝宅択沢卓拓託濯諾濁但達脱奪棚誰丹旦担単炭胆探淡短嘆端綻誕鍛団男段断弾暖談壇
地池知値恥致遅痴稚置緻竹畜逐蓄築秩窒茶着嫡中仲虫沖宙忠抽注昼柱衷酎鋳駐著貯丁弔庁兆町長挑帳張彫眺釣頂鳥朝貼超腸跳徴嘲潮澄調聴懲直勅捗沈珍朕陳賃鎮
追椎墜通痛塚漬坪爪鶴
低呈廷弟定底抵邸亭貞帝訂庭逓停偵堤提程艇締諦泥的笛摘滴適敵溺迭哲鉄徹撤天典店点展添転填田伝殿電
斗吐妬徒途都渡塗賭土奴努度怒刀冬灯当投豆東到逃倒凍唐島桃討透党悼盗陶塔搭棟湯痘登答等筒統稲踏糖頭謄藤闘騰同洞胴動堂童道働銅導瞳峠匿特得督徳篤毒独読栃凸突届屯豚頓貪鈍曇丼
那奈内梨謎鍋南軟難
二尼弐匂肉虹日入乳尿任妊忍認
寧熱年念捻粘燃
悩納能脳農濃
把波派破覇馬婆罵拝杯背肺俳配排敗廃輩売倍梅培陪媒買賠白伯拍泊迫剥舶博薄麦漠縛爆箱箸畑肌八鉢発髪伐抜罰閥反半氾犯帆汎伴判坂阪板版班畔般販斑飯搬煩頒範繁藩晩番蛮盤
比皮妃否批彼披肥非卑飛疲秘被悲扉費碑罷避尾眉美備微鼻膝肘匹必泌筆姫百氷表俵票評漂標苗秒病描猫品浜貧賓頻敏瓶
不夫父付布扶府怖阜附訃負赴浮婦符富普腐敷膚賦譜侮武部舞封風伏服副幅復福腹複覆払沸仏物粉紛雰噴墳憤奮分文聞
丙平兵併並柄陛閉塀幣弊蔽餅米壁璧癖別蔑片辺返変偏遍編弁便勉
歩保哺捕補舗母募墓慕暮簿方包芳邦奉宝抱放法泡胞俸倣峰砲崩訪報蜂豊飽褒縫亡乏忙坊妨忘防房肪某冒剖紡望傍帽棒貿貌暴膨謀頬北木朴牧睦僕墨撲没勃堀本奔翻凡盆
麻摩磨魔毎妹枚昧埋幕膜枕又末抹万満慢漫
未味魅岬密蜜脈妙民眠
矛務無夢霧娘
名命明迷冥盟銘鳴滅免面綿麺
茂模毛妄盲耗猛網目黙門紋問
冶夜野弥厄役約訳薬躍闇
由油喩愉諭輸癒唯友有勇幽悠郵湧猶裕遊雄誘憂融優
与予余誉預幼用羊妖洋要容庸揚揺葉陽溶腰様瘍踊窯養擁謡曜抑沃浴欲翌翼
拉裸羅来雷頼絡落酪辣乱卵覧濫藍欄
吏利里理痢裏履璃離陸立律慄略柳流留竜粒隆硫侶旅虜慮了両良料涼猟陵量僚領寮療瞭糧力緑林厘倫輪隣臨
瑠涙累塁類
令礼冷励戻例鈴零霊隷齢麗暦歴列劣烈裂恋連廉練錬
呂炉賂路露老労弄郎朗浪廊楼漏籠六録麓論
和話賄脇惑枠湾腕


常用漢字以外の人名用漢字

丑丞乃之乎也云亘些亦亥亨亮仔伊伍伽佃佑伶侃侑俄俠俣俐倭俱倦倖偲傭儲允兎兜其冴凌凜凧凪凰凱函劉劫勁勺勿匁匡廿卜卯卿厨厩叉叡叢叶只吾吞吻哉哨啄哩喬喧喰喋嘩嘉嘗噌噂圃圭坐尭坦埴堰堺堵塙壕壬夷奄奎套娃姪姥娩嬉孟宏宋宕宥寅寓寵尖尤屑峨峻崚嵯嵩嶺巌巫已巳巴巷巽帖幌幡庄庇庚庵廟廻弘弛彗彦彪彬徠忽怜恢恰恕悌惟惚悉惇惹惺惣慧憐戊或戟托按挺挽掬捲捷捺捧掠揃摑摺撒撰撞播撫擢孜敦斐斡斧斯於旭昂昊昏昌昴晏晃晒晋晟晦晨智暉暢曙曝曳朋朔杏杖杜李杭杵杷枇柑柴柘柊柏柾柚桧栞桔桂栖桐栗梧梓梢梛梯桶梶椛梁棲椋椀楯楚楕椿楠楓椰楢楊榎樺榊榛槙槍槌樫槻樟樋橘樽橙檎檀櫂櫛櫓欣欽歎此殆毅毘毬汀汝汐汲沌沓沫洸洲洵洛浩浬淵淳渚淀淋渥湘湊湛溢滉溜漱漕漣澪濡瀕灘灸灼烏焰焚煌煤煉熙燕燎燦燭燿爾牒牟牡牽犀狼猪獅玖珂珈珊珀玲琢琉瑛琥琶琵琳瑚瑞瑶瑳瓜瓢甥甫畠畢疋疏皐皓眸瞥矩砦砥砧硯碓碗碩碧磐磯祇祢祐祷禄禎禽禾秦秤稀稔稟稜穣穹穿窄窪窺竣竪竺竿笈笹笙笠筈筑箕箔篇篠簞簾籾粥粟糊紘紗紐絃紬絆絢綺綜綴緋綾綸縞徽繫繡纂纏羚翔翠耀而耶耽聡肇肋肴胤胡脩腔脹膏臥舜舵芥芹芭芙芦苑茄苔苺茅茉茸茜莞荻莫莉菅菫菖萄菩萌萊菱葦葵萱葺萩董葡蓑蒔蒐蒼蒲蒙蓉蓮蔭蔣蔦蓬蔓蕎蕨蕉蕃蕪薙蕾蕗藁薩蘇蘭蝦蝶螺蟬蟹蠟衿袈袴裡裟裳襖訊訣註詢詫誼諏諄諒謂諺讃豹貰賑赳跨蹄蹟輔輯輿轟辰辻迂迄辿迪迦這逞逗逢遥遁遼邑祁郁鄭酉醇醐醍醬釉釘釧銑鋒鋸錘錐錆錫鍬鎧閃閏閤阿陀隈隼雀雁雛雫霞靖鞄鞍鞘鞠鞭頁頌頗顚颯饗馨馴馳駕駿驍魁魯鮎鯉鯛鰯鱒鱗鳩鳶鳳鴨鴻鵜鵬鷗鷲鷺鷹麒麟麿黎黛鼎


個人的にびっくりした実は含まれていない漢字(異体字も含む)

々龍罠糞肛蛾蛙謳諜誹醤隕飴餃騙鮭嘘


(参考)一度は追加候補漢字に入りながら、その後外された漢字(人名用漢字などとダブりあり)

叩噓噂濡笠嬉朋覗撫溜鷹揃頷摑翔喋嚙洩禄栗馴駕鴨淵駿蘭胡蘇狼蝶搔惚蒼腿菩吊雀樽壺祀卿歪棲磯桶鷲媚寵秤套醬疼賤顚糊誼截綬庄毅揆躇躊憐狽萌撥謳蔓捏饉倦屛恍斡膠疇謗乖誹蒙聘憚哨

Posted in Adobe Flash, Stencyl | Leave a comment

五十音のテキストデータ(ひらがな・カタカナ)

ひらがな、カタカナ、の五十音テキストデータが欲しいのに全然見つからなかったのでわざわざ作りました。
組み込みフォントで文字指定するときに便利です。
コピペしれ。

あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
はひふへほ
まみむめも
やゆよ
らりるれろ
わゐゑを

がぎぐげご
ざじずぜぞ
だぢづでど
ばびぶべぼ

ぱぴぷぺぽ

ぁぃぅぇぉ

ゃゅょ

アイウエオ
カキクケコ
サシスセソ
タチツテト
ナニヌネノ
ハヒフヘホ
マミムメモ
ヤユヨ
ラリルレロ
ワヰヱヲ

ガギグゲゴ
ザジズゼゾ
ダヂズデド
バビブベボ

パピプペポ

ァィゥェォ

ャュョ

、。ー~「」【】『』゛゜
♪♭■□◆◇△▲▽▼◎○●◯‥…・∴∵※×〒
!”#$%&'()=~|`{+*}<>?_-^\@[;:],./\
!”#$%&’()=~|`{+*}<>?_-^\@[;:],./\

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789

Posted in Stencyl, 未分類 | Leave a comment

Stencyl で Android アプリ作成のメモ

Windows 版 Stencyl 3.2 時点でのメモです。(無課金)
Android 向け以外のことも書いてます。

GUI 上で設定した日本語テキストは表示できない

あら不思議、Stencyl は Android アプリにすると、ビヘイビアの text とか list とか map なんかで入力しておいた日本語が表示されなくなります。

ただし何故かスクリプトからであれば使用できます。
つまり set [text] to [attribute] というように、スクリプト上で設定すればOK。
ビヘイビアやアクターのカスタマイズとかの画面で入力した日本語は表示されないので注意。

なお、Flash 書き出しなら、何の問題もなく出力されます。

GUI でビヘイビアのテキスト属性値を設定すと、表示できない文字がある

それは「<」「>」「”」「&」です。「&lt;」などとエンティティ化しやがった上でそのまま表示しやがります。

ただしこちらもスクリプトからであれば使用できます。
なので、スクリプト上で「replace “&lt;” with “<" in [text]」とかすれば解決はします。 また、Flash であれば問題なく表示されます。 ちなみに 1byte フォントで該当する位置にある文字は使用できないことになります。(位置はフォントによる)

フォントの「Import Font from Image」機能がへん

この問題は Stencyl 上で発生します。
なんかこの機能はまともに動作しないです。
(ワークスペースフォルダ内のファイルを直に書き換えたりしないとダメ)

show alert with title ブロックは使えるよ。

もちろん日本語は使えないがな!
ちなみにスクリプト上で「\u3042」という感じに文字コードで入力したらコンパイルが止まらなくなったゾ☆

AdMob Extension は利用できない?!

Setting にて AdMob Extension を利用可能な状態にするだけで、Compiling が中断してしまう。
英語圏では特に問題になっていないようなので、私の環境限定なのかは分かりませんが、とにかくダメになりやがります。
Stencyl 自体をクリーンインストールしなおすと直るかもしれないらしいです。
標準の Monetization 機能使えということか?!

App Name に日本語は使えない

全角が含まれていると Compiling が終わらない。
運良く終わってもアプリ名が文字化けする。

Scale Mode でスケール変更するようにしていると WebViews の位置がズレる

100%で表示されるなら問題ないと思われますが、拡大縮小されるとその分 WebViews の位置がズレます。
No Scaling にして Scale 1x、1.5x…で対応するようにすればOK。

Enable Debug Drawing が有効なのは Box2D の時だけ

この問題は Android に限りません。Flash でも発生します。
また、Collision Group で何かしらのグループの Region を ON にすると書き出し時にエラーが出ます。
さらに動的に create region したい時は、Created イベントなどで作らないと、生成されるのに反応しない region ができる。(例えば Enter Screen イベント時で作っても反応しない)

シーンでアクターのカスタマイズをすると本家の値も変更される場合がある

この問題は Stencyl 上で発生します。
List 形式の Attributes でよくなります。
本家の編集画面を開いていると回避できるような…

Attribute の Internal Name を変更したら一旦セーブしてからゲームを閉じた方がいい

この問題は Stencyl 上で発生します。
でないと null がぁーってエラー出るだけで参照できません。

アプリ終了するには、以下のスクリプトで安定か?!

Import で、
import nme.Lib;
をインポートして、必要な箇所で
#if android
nme.Lib.exit();
#end
とすればOKかな。
ほかにも
import nme.system.System;
nme.system.System.exit(1);
という案もあるようだが、こちらでは完全に終了されない様子。

「trigger event」にテキストは渡せない

この問題は Android に限りません。Flash でも発生します。
テキストの Attribute はムリなご様子。
「trigger event [text] in behavior [text] for [actor]」とかを使いませう。

Posted in Stencyl | Leave a comment

【自作】1分で作れる Oculus Rift っぽい VR HMD (ヘッドマウントディスプレイ)【安価】

まずは完成品の写真をご覧ください↓

簡易 バーチャル ヘッドセット
おっと!バカにするのは実際に試してからにしてもらおうか!(`・ω・´)

Oculus Rift を体験した衝撃から自作する方が多いようですが、どうも工作に自信のある方のハイレベルな物ばかりなので、もっと究極に手軽なものを考えてみました。

また、先日 Google I/O で配布されたダンボールで自作できる Cardboard もかなりお手軽な感じはありますが、自作するには部品点数も多くダンボールといえど高いカッティング技術が要求されるなど、まだまだ難度は高いように感じます。
※ 最近では簡単に作れるキットも発売されています。⇒ タオバイザー|TaoVisor

このページでは簡易 VR HMD の作り方や楽しみ方の紹介をしています。

こうやって使うのデス!

こうやって使うのデス!

■ では早速作り方!

完成品を見れば一秒で理解できる構造(?)ですが、実は色々と注意点もあるので最後までよく読んでね。

まず以下のものを用意してください。

  1. 画面サイズ5~7インチ程度のスマホ
  2. 置き型ルーペ(2個)
  3. セロハンテープ

手軽とか謳っておきながら初っ端にスマホを要求するところが詐欺臭いですが、電子工作なしでディスプレイからトラッキングまでを実装できる唯一の方法なので、これを外すことはできません;

☆ 注意点その1:画面サイズについて

スマホなら何でも良いというわけではありません。
特に画面サイズ(幅)が重要です。
詳しくは下の図をご覧ください。
理想の画面サイズ
つまり中心が大きくズレないことが条件です。
多少のズレ(特に内側へのズレ)は眼球がどうにかしてくれます。(疲れやすくなるけど)

個人差もありますが、昨今の5インチディスプレイ端末であればたぶんOKです。
7インチでもいけるらしいのですが、モノがないので未確認です。(FakeRift では7インチを採用してる)

次に至近距離からディスプレイを見れるようにするための、凸レンズが必要になります。
置き型ルーペであればピント調整や外装を用意する必要もなく、取り付けるだけで完成させることができるのでお勧めです。
ただし恐らくこのルーペを調達することが、最も困難な工程になるかと思います。

☆ 注意点その2:ルーペの選び方

置き型ルーペであれば何でも良いというわけではありません。
そもそも画面内に2つ置ける大きさである必要があります。
理想のルーペ
没入感に大きく関わる部分なので、余裕のある方は色々な製品で試してみることをおすすめします。
私は運良く丁度いいサイズのルーペが100均で用意できたのですが、そうでない方はこの部分を自作する必要があります。
その方法は後記『置き型ルーペを自作する』を参照してください。
(実は写真のルーペも一手間加えることでより良くできることが後で分かりました⇒『改良してみた』)

先の完成品の写真では以下のものを使用しています。

  1. Samsung Galaxy S III
  2. 100均のルーペ

ミニルーペ
ちなみに百均でルーペは文房具コーナーではなく老眼鏡コーナーにあることが多いです。

ルーペの位置は個人差があるので一概には言えませんが、まずは両画面の中心にルーペを置き、実際に映像を確認しながら見やすいと思う位置に微調整しましょう。
あとはルーペをテープで固定すれば完成です。
簡易 バーチャル ヘッドセット with ミクさん
なお、テープはスマホを持った時の上側一箇所だけで止めておけば、ルーペをペロンとひっくり返すだけでタッチ操作ができるようになるので楽チンです。

■ 楽しみ方(コンテンツ)

最も手軽なのは YouTube の3D動画やニコ動にある立体視(平行法)の画像や動画です。
ヘッドトラッキング機能は利用できませんが、数も多く再生するだけで手軽に楽しめます。

「立体視」や「平行法」などのキーワードで検索すると捗ります。
※ただしスマホの画面と縦横比率が異なり中心がズレるタイプのものは利用できません(ニコ動に多い)

また、YouTube では3D動画を絞り込み検索できます。
3D動画の検索方法

 

専用アプリであればヘッドトラッキング機能を利用した、より没入感の高いコンテンツを楽しむことができます。
同じようなアイデアで作られた自作 VR HMD 用アプリも色々と出ているので、いくつかご紹介します。
ちなみにここで紹介しているものは全部 Android 用です。



Tuscany Dive


Dive City Rollercoaster


The Height Demo

足元にボタンがあって視点を数秒合わせると歩き始めるとか色々工夫されていて面白いです。
Android 対応ゲームパッドがあれば、より本格的なゲームも楽しめます。
まぁ本機では両手がふさがってるから無理ですがねw



REFUGIO 3D Space-Station


Hang Gliding


Shadowgun VR

この他にも色々あります↓
divegames のゲーム一覧ページ
REFUGIO3D のゲーム&動画紹介ページ(消えた?)

なお残念ながら Oculus Rift 対応のゲームを遊ぶことはできません。

あと、部屋を暗くしたりイヤホンを使用したりすると、臨場感&没入感がましてイイ感じになります。

■ 置き型ルーペを自作する

よくある虫眼鏡タイプのルーペそもそも置き型ルーペ自体手に入りにくいので、比較的どこの百均にもある虫眼鏡タイプのルーペで代用する方法を考えてみました。

ルーペは以下のようなものを選びましょう。

  1. できるだけ画面上に2つ収まるサイズ
  2. それでいて、できるだけ大きいもの
  3. できるだけ拡大率(倍率)がいい感じのものw

てか「拡大率がいい感じ」ってナンヤネン!と思われるかもしれませんが、画面やレンズのサイズによって最適な倍率は異なるので、実際に店頭でスマホにかざして試してみることをおすすめします。
(そもそも「○倍率」とかの表示自体が微妙に信用できないです…)
なお、2~3倍のレンズでは数枚重ねなければ、まったく話しにならないレベルです。
そのため、手に入るレンズのサイズと倍率にもよりますが、少なくともこれが2セット(計4個)くらい必要になることが多いです。

小さいお店だとデカイくせに倍率2倍とかのしか無い場合があります。
(そもそも大きいレンズより小さいレンズのほうが倍率を高くしやすい)
どうしても2~3倍のものしか無いという場合は、片側4枚重ねの計8個とかになる場合もありますので覚悟してください。

では、具体的な試し方を説明します。

見え方に影響する要素

  1. レンズと目の距離を可能な限り近づける
    (レンズの外が見えないようにするため。大きいほうが許容範囲が広くメガネにも対応しやすい)
  2. その状態でピントが合う位置まで画面に近づく
    (目は遠くを見る感覚のまま、距離でピントを合わせること!)
  3. その状態の視野によって判断する
    • A.広すぎる(余計なものが見えてしまう)
      ⇒倍率が低いので、より倍率の高いものに替えるか、もう一枚重ねて再度1.からやり直し。
      ※妥協点:既に3枚以上重ねてる
    • B.丁度いい
      ⇒その組み合わせで利用できそうです。
    • C.狭すぎる
      ⇒倍率が高すぎる。倍率が低いものに替えて再度1.からやり直し。
      ※妥協点:ほかにない

※この試し方は片目でもおこなえます。
※多少広かったり狭かったりしても、使えないわけではないのである程度は妥協も必要です。

先にも書きましたが文房具コーナーではなく老眼鏡コーナーにあることが多いです。
「やだあの人、老眼鏡でスマホ見てるプププ」という視線に晒されることもありますが、とにかく根性でいい感じのものを探してくださいw

ルーペが用意できたら、早速取り付け作業に入りましょう。
あらかじめ実際に映像(ヘッドトラッキングしない動画や静止画)を再生しながら、ルーペの組み合わせを確認したり、画面との距離や位置などを測り、最適な状態をメモしておくと良いでしょう。

紙コップを利用した自作卓上ルーペの作り方
土台(?)には加工しやすい紙コップを使用します。
高さ調節も簡単ですし、なにより円錐形なので視野も保たれます。

紙コップの底をカッターで切り取り、ピントが合うよう高さもカットしてルーペを載せれば完成です!
わ~カンタン!

まぁ組み合わせによっては使えない方法かもしれないけど、各自こんな感じで工夫してみてね!

なお、上記の例では3.5倍ルーペを2枚重ねで使用していますが、それでも視界に余計なものが入ってしまいます。
同じ製品を使用している方は3枚重ねにして距離を縮めることをお勧めします。

■ もう一手間加える

コップの内側を黒く塗りさらに室内を暗くすれば、余計な部分が目立たなくなり見やすくなります。
内側を黒く塗った効果
特に両目で見た時の反射によるチラツキが抑えられます。

レンズの取り外し方レンズだけにするとコンパクトにできます。
重ねにくくなりますが、重い場合や幅があり過ぎる場合に有効です。
ノコギリなどで写真のように一部をカットすればレンズだけ取り外せます。
取っ手を切り取るだけでも軽量化になります。

■ 改良してみた

市販の置き型ルーペをそのまま利用してもそれなりの成果を得られましたが、少し視野が狭いと感じたので、その点を改良してみました。
特定の製品を使用しているため、参考になるか分かりませんが何かの足しになれば幸いです。

さて、「視野が狭い」ということは「倍率が高過ぎる」ということなので、そこを調整する必要があります。
当該置形ルーペはキャップを開けるように回せば、簡単に分解できます。
ルーペを分解
幸いなことにこのルーペではレンズを2枚使用していたので、1枚外すだけで倍率を下げることができます。
(商品は3倍率と謳っていますが、これ一枚で3.5倍と謳っているルーペより拡大率が高かったです…
何をどう信じたらいいのか分かりません;)

ただし、それだけでは今度はピントがズレてしまい使い物になりません。
ピントを合わせるには画面から少し離す必要がありました。
そこで、下に倍率低め(といっても3.5倍)のルーペを敷いてみたところ、ぴったりと合いました。
改良後
あ、あとキャップも外しています。(縦にした時レンズが落ちないようにもした)

結果これだけの効果がありました。(実際にレンズ越しに撮影したものです)
改良の効果
周りがよく見えるようになり、ドットの荒さも気にならなくなりました。

同じような製品が手に入る方は、ぜひお試しください。(/・ω・)/

■ 過度な期待は禁物ですw

当たり前ですが、いろいろな面で Oculus Rift には及びません。

  1. 期待したほどの没入感はない(組み合わせにもよるけど)
  2. Oculus Rift のゲームは遊べない
  3. トラッキング遅延
  4. そもそもヘッドにマウントしてないよね

ディスプレイやレンズのサイズによっては期待したほどの没入感は得られないかもしれません。
多くの手作り VR HMD では7インチを採用しているので、その方がいいのかもしれません。
私は5インチでジェットコースターのアプリをワクワクしながら起動してみましたが、別に全然ギャーとかなりませんでしたw

より高品質な体験を希望する方は、素直に Oculus Rift を注文しましょう。

■ 参考資料

タオバイザー|TaoVisor

FakeRift関連
FakeRiftクラウドファンディングのためのメモ
https://media.dmm-make.com/maker/379/

Google Cardboard

Durovis Dive

REFUGIO 3D

iPhone 向けダンボール製の簡易 HMD キット『ハコスコ』(立体視非対応?)

「スマートフォン用ポータブル・VRケース」

Posted in VR HMD | 1 Comment

windows の stencyl 3.0 系で Extensions が正しく読み込まれない場合の対処法

まず、Extension は windows 版であれば
C:\Users\[ユーザー名]\AppData\Roaming\Stencyl\stencylworks\engine-extensions\
フォルダの中にインストールされます。

それ以外にも
C:\Program Files\Stencyl\plaf\haxe\extensions\
というフォルダ内にもそれっぽいのが入っていますが、ここは違うようです。(現在は使用されていない?)

で、外国で「Extensions ガ、ヨミコマレナイデース」とか「Extensions ガ、インストールデキナイデース」とかの問題の多くは前者のフォルダに解凍した extensions をぶち込めば解決するぜブラザー!とかいう回答ばかりなのですが、私の場合は違いました。
もしかして日本語環境でのみ発生する問題なのでしょうか?

そもそも既存の Extension (Tile API や Test Extension)ですら有効化してもブロックが追加されないので、よくよく調べてみたところ各フォルダ内の blocks.xml が正しく読み込まれていないことがわかりました。

どうもこの XML には Unicode の BOM (byte order mark)が追加されているようで、それをテキストエディタで無しにすることで Extension が機能する(拡張ブロックが利用できる)ようになりました。

上記が直接の原因かはわかりませんが、単にインストールするだけではダメな場合は一度お試しください。

Posted in Stencyl | Leave a comment

Stencyl 3.0 キタコレ備忘録!

Stencyl 3.0 がリリースされましたよヤッタネ!
http://www.stencyl.com/
このページは 3.0 の紹介&備忘録ですよ。

■ めでたく日本語表示に対応!

こんな素敵エクステンションも出てるよ!(≧∇≦)/
Dialog Extension
http://dialog.justin.espedaladventures.com/
サンプル内の CJK ってところで日本語のサンプルが見れます。
(厳密なCJK統合漢字のことを言っているのかは謎)
(CJK = 中国語(Chinese)、日本語(Japanese)、韓国語(Korean))

■ HTML5 ?なんのことやら┐(´∀`)┌

3.0 リリース遅延の原因だった HTML5 出力はバッサリオミットしてますよw
将来的に対応するかは不明。

■ Stencyl がインストールする Android SDK の場所

ユーザーのフォルダに入れるみたい。
要は Games Folder の中。
windows 8 の場合は
C:\Users\[ユーザー]\AppData\Roaming\Stencyl\stencylworks\android-sdk
だったよ。

Extension がインストールできない

現在は普通にSettingでzipを選択すればインスコ可能です。
ただしそれだけではダメな場合があります。
対処法はこちら⇒「windows の stencyl 3.0 系で Extensions が正しく読み込まれない場合の対処法

現時点(Build 6990 – February 25th, 2014)では エクステンションインストールボタンは機能しない。
手で
[Stencyl 3 をインストールしたフォルダ]/plaf/haxe/extensions/
に解凍したフォルダをコピーする必要がある。
あと_MACOSXフォルダがあるとドーノコーノ…らしい。
Mac でしか確認してねーんじゃねーか説…

さらに、Game Settings の Extensions で何故か Disable (無効)にしないと使えないようなんだけど…正気か?
少なくともwin8で上記インストール方法で入れた WebViews for Mobile はそうしないと利用できなかった。
あと、Android Utils エクステンションはどーやってもブロックが見つけられない;

たぶん私の勘違い。
要はボタンが「有効化する」と「無効化する」という意味であり、有効時には「無効化する」つまり Disable ボタンが表示されているということのようです。

■ Simple Physics について

・BOX 型の Collision 以外は無効

Circle とか Polygon は使えない。
BOX型であればサイズや位置の変更は可能。

・Mass Friction Bounciness Damping などの物理関係は無効

まぁ当たり前やね。

・Scene の Gravity は有効!

コリャ便利!

・Tile の Collision は有無のみ

斜めとか選んでも Square 判定。(なんか変になる)

・衝突時の位置調整(解決)が微妙

Actor 同士だと角衝突で重なったりする。
Tile もぶつかった後弾かれているのが目に見える。
Sensor にすると隣接する Tile や Actor の解決がおかしくなる。
今のところ Simple Physics は単なる判定のみに利用するほうが良さげ。

矢印キーで移動。爆発はセンサーで触れると振動。モンスターはアクターで乗れる。クリックでリスタート。
何故か落下しないモンスターやセンサーに隣接するタイルの判定がおかしいことを確認できますw

Posted in Stencyl | Leave a comment

Stencyl 2.2 時点での備忘録

Stencyl 2.2 時点でのメモ。

このページの情報は古いです。
既に Stencyl 3.0 がリリースされています。
下記情報の多くは役に立たないでしょう。

▼ コンソールを表示する方法

ゲーム実行中に「\」(¥)キーでコンソールが出せます。
右クリックして Show Profiler でプロファイラーも表示できます。

▼ Every N secs イベントは Actor から独立して動作する

なので Actor を kill しても継続され、結果的にエラーの元とかになる。
do every 0 seconds ブロックなどは連動している様子。
Enter Screen などのイベントで do every 0 seconds ブロックを使って記述すれば、Actor を kill すれば処理もされなくなる。

▼ 他の Behavior から Attribute 付きのブロックをコピーすると、そのビヘにもその Attribute がセットされる

エラー回避のためだとは思うけど、ゴミ Attribute が増える原因でもある。

▼ send Actor to layer with ID: ブロックは実はID指定できない

Scene Designer 上で確認できる ID では無く、一番上のレイヤーが1で以降2,3と指定する。
ただし 3.0 では修正されているらしい。

▼ list タイプの Attribute が参照型のような動きをする時がある

例えば A という Actor Type をコピーし B という Actor Type を作った時、A、B 双方に割り当てられている Behavior で使われているどちらかの list を編集すると双方変化してしまう場合がある。
また、Behavior の初期値を変化させても、同様に Actor Type の値まで変わってしまう場合がある。
恐らくコピー後に一度 Close Game する必要がある。

▼ バグ

■ Custom Collision Shapes で凹ポリゴン(concave polygon)を設定する方法

stencyl Custom Collision Shapes

凹ポリゴンだからダメだよエラーが出ていても、Name を一旦消して再度入力すると OK ボタンが押せるようになる。
もちろん非推奨。多くの場合、実行時の判定に問題が出る。

Posted in Adobe Flash, Stencyl | Leave a comment