futabooo blog

色々手をつけすぎてすぐに忘れるので備忘録

vagrantでホストOSとゲストOSでフォルダをシェアする

ホストOSで編集作業等をするために、共有フォルダの設定を行う。

$ sudo ln -fs /vagrant /home/vagrant/nodejs

こんなパスにhello.jsを作成する。
/Users/futabooo/Vagrant/centOS64vm_clone/hello.js

ゲストOSでも見れる!

[vagrant@localhost ~]$ ls /home/vagrant/nodejs/
Vagrantfile  hello.js

AndroidのEditTextにフォーカスがある時にキーボードの全画面表示を抑制する

XML上で、EditTextのプロパティで下記の1行を追加

<EditText android:imeOptions="flagNoExtractUi | flagNoFullscreen" />

flagNoExtractUiはAPIレベル1使えるオプション
flagNoFullscreenはAPIレベル11から使えるオプション

今後はflagNoFullscreenだけ使っていればいいと思いますが、
いまだにAndroid2.3とかもシェアがあるので両方指定しとく。

ただこのオプション、端末側の設定で強制的に効かなくすることもできるようなので、
端末によってはフルスクリーン表示が抑制できないかもしれません(´・ω・`)

更に、フルスクリーン表示しなくすることで下のViewが見えなくなって入力してる文字がみえなくなるかも。
その時の解決方法まではまた今度。

参考
EditorInfo | Android Developers

Vagrant導入時につまづいたことの解決策

だいぶバージョンの違いなどにやられたので、これを書いた時点での自分の環境を。

MacOSX 10.9.1
Vagrant 1.4.0
VirtualBox 4.3.4

ぶちあたった問題点は下記2点
・GestAdditionsのバージョンの違い
・ネットワークの設定

以下解決策

GestAdditionsのバージョンを更新する

こちらを参考に。
VagrantのboxのGuest Additionsのアップデート方法 - Qiita [キータ]

$ vagrant plugin install vagrant-vbguest
$ vagrant vbguest

これでしばらく待てばアップデート完了する。

GuestAdditions 4.3.4 running --- OK.

とかって表示される。
このままだと自動で更新が走るので、手動でやりたい場合は設定ファイル作成する。
/Users/futabooo/.vagrant.d/Vagrantfaile

Vagrant::Config.run do |config|
    # we will try to autodetect this path.
    # However, if we cannot or you have a special one you may pass it like:
    # config.vbguest.iso_path = "#{ENV['HOME']}/Downloads/VBoxGuestAdditions.iso"
    # or
    # config.vbguest.iso_path = "http://company.server/VirtualBox/%{version}/VBoxGuestAdditions.iso"
  
    # set auto_update to false, if do NOT want to check the correct additions
    # version when booting this machine
    config.vbguest.auto_update = false
 
    # do NOT download the iso file from a webserver
    config.vbguest.no_remote = true
end

ネットワーク設定についてパッチを当てる

参考
Vagrant 1.4.0 で private_network を指定しているとエラーになる件 - akishin999の日記

こんなエラーが出る。

The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

/sbin/ifdown eth1 2> /dev/null

Stdout from the command:



Stderr from the command:

エラーメッセージっぽい最初の2行で検索してると、別のエラーの解決策にあたる。
3行目のところで検索したら参考のURLがひっかかり解決に至りました。ありがたい。

ソースを修正する。
下記を参考に。
Merge pull request #2628 from makern/ifdown-fix · 70b662e · mitchellh/vagrant · GitHub


これで無事にブラウザにHello worldが表示されました。

cocos2d-x 3系へ書き換えてみる

書き換えできなかったので、知っている人がいれば教えていただきたい!

2系だとボタンが押された時の動作を設定するのにこんな感じ

MenuItemFont* retryLabel = MenuItemFont::create("Retry", this, menu_selector(HelloWorld::menuRetryButton));

void HelloWorld::menuRetryButton(CCNode *node)
{
    CCDirector::sharedDirector()->getTouchDispatcher()->removeAllDelegates();
    
    CCScene* gameScene = (CCScene*)HelloWorld::create();
    CCDirector::sharedDirector()->replaceScene(gameScene);
}


3系で書きなおしてみるもエラーが出ていて使えない。
MenuItemFont::createでの2番目の引数が良くないみたいなのだが分からない。

MenuItemFont* retryLabel = MenuItemFont::create("Retry", CC_CALLBACK_0(HelloWorld::menuRetryButton, this));

void HelloWorld::menuRetryButton(Object* pSender)
{
//    Director::getInstance()->getTouchDispatcher()->removeAllDelegates();
//    Director::getInstance()->r
    
    Scene* gameScene = (Scene*)HelloWorld::create();
    Director::getInstance()->replaceScene(gameScene);
}


ちなみに上記でコメントアウトしている部分も書き換えができていないので、分かる人いれば教えて欲しいです。
2系

CCDirector::sharedDirector()->getTouchDispatcher()->removeAllDelegates();


3系

Director::getInstance()->この先がわからない\(^o^)/

cocos2d-xハンズオンを受けたのでメモ

頭にCCがつくのが最初気持ち悪かった。
iOSの開発やってる人は馴染みやすそう。
クロスプラットフォーム開発すげぇ!
Unityよりも固めたアプリが軽量。


// シングルタップでは必ずoverride
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);

// cocosのタッチポイントをopenGLのタップポイントにする。touchPointは構造体(x, y)
CCPoint touchPoint = CCDirector::sharedDirector()->convertToGL(pTouch->getLocationInView());

// 指定された四角形の中にタッチポイントが含まれているかどうかをtruefalseで返す
node->boundingBox().containsPoint(

// フォントの指定で空にするとシステムフォント
CCLabelTTF* timerLabel = CCLabelTTF::create("0.000s", "", 32.0f);touchPoint)

// CCDirectorはシングルトンになっている。画面を統括する唯一のクラス。sharedDirectorでインスタンスを取得してgetWinSizeで画面サイズ取得
CCSize bgSize = CCDirector::sharedDirector()->getWinSize();

// scheduleを使うと毎フレーム呼び出す
this->schedule(schedule_selector(HelloWorld::countTimer));

// getChildByTagの返り値がnodeなのでキャストする
CCLabelTTF* timerLabel = (CCLabelTTF*)this->getChildByTag(kTagTimerLabel);

// flush()までやってsetしたものが次回使えるようになる
CCUserDefault::sharedUserDefault()->setFloatForKey("highscore", gameTime);
CCUserDefault::sharedUserDefault()->flush();

// ボタンが10こあったら最後にNULLを入れる
CCMenu* menu = CCMenu::create(retryLabel, NULL);

Unity4.3のプロジェクトをcodebreakで管理する

Unityのプロジェクトを複数人で共有する必要が出てきたので、
無料でプライベートリポジトリが作れるcodebreak;を使ってみました。
Free Git Hosting | codebreak;


とりあえず一人で2PCでやってみたらできたので備忘録。

1.Unityプロジェクト側の設定

Edit>Project Settings>Editor
Version Control>ModeをVisible Meta Filesへ変更する

f:id:futabooo:20131208200841j:plain

2.codebreak;のリポジトリへコミット

事前にcodebreak;上でリポジトリを作成しておく。


Unityのプロジェクト内にあるLibraryフォルダを丸ごと削除する(必要ないかも)
f:id:futabooo:20131208201158p:plain

プロジェクトのフォルダ内に移動して下記コマンド

$git init
$git add Assets
$git add ProjectSettings
$git commit -m "first commit"
$git remote add origin [リモートリポジトリ]
$git push -u origin master

これでcodebreak;上にリモートリポジトリ完成。

3.ローカルにクローン

$git clone [リモートリポジトリ]

プロジェクトがローカルにコピーされる。
Unityでプロジェクトを開く。
なんか適当に変更加える。

4.変更内容をリモートリポジトリへコミット

変更内容の確認をしてみる。
今回はマテリアルの色を変更してみただけなので、下記のファイルが変更されていた。

$git status
$On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified: Assets/FloorMaterial.mat
        modified: Assets/Main.unity

untracked files:
  (use "git add <file>..." to include in what will be committed)

        Library/
no changes added to commit(use "git add" and/or "git commit -a")
$git add Assets/FloorMaterial.mat
$git add Assets/Main.unity
$git commit -m "floormaterial color changed"
$git push origin master

4.ローカルにリモートリポジトリの変更を取り込む

$git pull

以上!