ゲーム作るためのこと学ぶぶろぐ(’ー’)/チャラン

【目標】毎日必ずTVゲームとプログラミングする。

Xcode8.3でxvimを使う

この記事は

https://github.com/XVimProject/XVim

xvimとはxcodevimが使えるようにするプラグインのことです。

今回はこれをxcode8.3に入れます。

xcodeをバージョンアップしたらxvimが使えなくなってしまったので、それの解消方法をまとめときます。

この記事は以下の記事から今回自分が必要だった部分だけ抜粋させていただきました。感謝。

www.ie-kau.net

qiita.com

試した環境

macOS sierra  Xcode8.3.2(8E2002)

本題

まず古いのが残っている場合は消します。

cd ~/XVim  // Xvimを置いてるディレクトリへ移動。このディレクトリは適宜変更してください。
make uninstall
rm -r ~/XVim

証明書を作って、それを登録します。

https://github.com/XVimProject/XVim/blob/master/INSTALL_Xcode8.md

証明書を作る手順は上の通り。

ここでは上の手順の通りに XcodeSigner という名前で作ったので、それを登録します。違う名前で作った人は XcodeSignerの部分を変えてください。

sudo codesign -f -s XcodeSigner /Applications/Xcode.app  

keith さんのコードを使う

xcodeを8.3にした時点で何度かインストールをしてみたのですが、make自体が通らなくなってしまいました。

issueに上がっていたみたいですでに対応してくれた人がいるらしいのでそちらのソースでコンパイルすることにします。

github.com

git clone https://github.com/keith/XVim.git
git fetch origin xcode-8.3-release
git checkout xcode-8.3-release
make

これでmakeが通るようになりました。

UUIDを登録する

github.com

手動でやってもいいんですが、一括でやってくれる上のツールをインストールします。

gem install update_xcode_plugins
update_xcode_plugins

自分の場合、これでうまく行かなかったので以下をしたところ、無事xvimが有効になりました。

update_xcode_plugins --unsign

【朝からUnity:1日目】準備編

準備

あらかじめUnityをDLしておきます。

https://unity3d.com/jp/get-unity/download

Unityを起動するとライセンスを選べます。

ライセンス周りのことは↓に載っているので、これを元に今回は無料の Parsonal を選びます。

japan.unity3d.com

そのままアンケートに答えて進んでいけばUnityのプロジェクトが作れる

まとめ

今日はこれだけで終わってしまった。。

Execution failed for task ':android:compileReleaseJavaWithJavac'. compileSdkVersion 'android-24' requires JDK 1.8 or later to compile.

apkファイル作ろうとした際に以下のエラー発生。

Execution failed for task ':android:compileReleaseJavaWithJavac'.compileSdkVersion 'android-24' requires JDK 1.8 or later to compile.

この直前に targetSdkVersionを24にあげてました。

エラーメッセージにある通り、API24 から?(おそらく。23では大丈夫だったため) JDK1.8 が必要になったらしいです。

javaのバージョン確認

インストールしてあるjdkのバージョンを確認。

java -version

または

javac -version

知らなかったけど、コンパイラのバージョンを見るときは, java じゃなくて javac でみたほうがいいらしい。

jdk7をアンインストール → これでとりあえず解決したよーー

確認した結果versionは1.8でした。なのにこのエラーが出る。

javaが複数いるっぽい気がしたので、/Library/Java/JavaVirtualMachinesディレクトリを見てみると、jdk7と8がいる。#Mac OSX Yosemite でやってました。

なんとなくjdk7のほうが使われているようなので、jdk7をアンインストールしてみます。

JDK 7 Mac Install

oracleの↑のページの通りにやればいい。ディレクトリごと消すだけ。権限がないときは、sudo は必要でした。

rm -rf jdk1.7.0_06.jdk

これはjdk7の手順みたいです。jdk6以前は違うみたいなので注意。

これでとりあえずいくようになりました。

直接android studio 使っている人とかは、android studio の設定で使うjdk決めれたりするみたいだし、 jdkのバージョン複数持ってないといけない人もいると思うので、古いバージョンは削除してもOK! な環境な人しかダメなんで、とりあえずってかんじです…

libgdxでscaleするの起点位置の指定の仕方

ふと、scaleする起点?中心?の位置が画像の左下とか真ん中とかしかやったことなくって、

= Actor#setOrigin (int alignment)

画像内の好きな位置にしたかったんだけど、わかんなかったからしょぼいけどメモ。

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Image img;
    Stage stage;
    
    @Override
    public void create () {
        stage = new Stage(  );
        batch = new SpriteBatch();

        img = new Image(new Texture("badlogic.jpg"));
        stage.addActor(img);
        //img.setOrigin( Align.center ); //真ん中
        //img.setOrigin( img.getWidth()/2, img.getHeight()/2 ); //これも真ん中
        img.setOrigin( img.getWidth() / 2, 0 );  //
        img.addAction( Actions.scaleTo(0.0f, 0.0f, 2f) );

    }

    @Override
    public void render () {
        Gdx.gl.glClearColor( 1, 0, 0, 1 );
        Gdx.gl.glClear( GL20.GL_COLOR_BUFFER_BIT );
        batch.begin();
        stage.draw();
        batch.end();
        stage.act( Gdx.graphics.getDeltaTime() );
    }
    
    @Override
    public void dispose () {
        batch.dispose();
    }

auスマフォでパケ死しました。

auスマフォを3,4年くらい使い続けて初めてパケ死したのですが、ようやく話が終わったので記載しておきます。

こういうことになりいろいろと体験談とかを参考にさせてもらったので、私も記録しておこうと思ったわけです。

ちなみに結構何度も見させてもらったのは以下の記事。ありがとうございました。

auのパケット通信してないのに通信費が計上されているんだが - 耳鳴りのしすぎは病気

auのパケット通信してないのに通信費が計上されているんだが 下編 - 耳鳴りのしすぎは病気

経緯

機種はIS12F っていうかなり古いやつだと思う。

いつもwifi(wimax)を持ち歩いているんで、モバイル通信は一切しないで何年も使い続けてる。

たまたま通帳記入したらauから1万ぐらいのお金が既に引き落とされていたことに気がつく。いつもは2か月で2000円くらい。

さらに今月の金額も確認したら1万近くいってる。

というわけで7月、8月に合計2万ほどの不明な金額が発生してた。

08/28

気づいた日。

もちろんサポートセンターに電話。 157(サポセンの番号)の後、電話オペで内容によってダイヤルおすやつなんだけど、自分は「料金照会」「その他」ってとこに問い合わせたよ。

総合案内 | スマートフォン・携帯電話に関するお問い合わせ | au

家族が勝手に触ってないかとか、メール,Cメールとか、設定がおかしくなってないかとか

価値ねえ会話に費やされて、ようやく話を上に通す、っていう動きになったから明日「上席」?とかいう位のやつが連絡を入れるという話になったので電話終了。

08/29

ちょっと予想はしてたけど電話こねえ。

08/30

しかたないのでこちらから電話。オペレーター→責任者(「上席」?とか言ってた)からお詫びの電話を受ける。 また明日連絡がくるとのこと。いちいち時間とられる。

08/31

日単位でいつパケ通信されてたかとかがわかる「通話明細書」っていうのがあるらしく、 それをみて確認して欲しいとのこと。それ見ても納得いかないならまた電話しろとのこと。

まあちゃんと手順踏まないといけなさそうなのは他の人の記事で承知しているのでとりあえず我慢。

09/01

au通話明細」の用紙が届く。

09/03

au通話明細」を郵送した。

09/09

au通話明細書」が来てた。中身見たけど、 パケットが発生した日とパケット量が記載されているが(あと通話も。)、全く身に覚えないわ。1日とかじゃなくて数日使われてる。

09/10

当然納得いかないのでまた電話したが混んでるとか言ってまた明日か明後日に連絡が来ることになった。そんなに電話いつでも取れるわけじゃないしめんどくさすぎ。

09/11

連絡きました。

結果的に、既に発生している料金からパケット放題の上限の値段分の差額を返金されることになりました。なので、1万円以上は戻ってくると思う。

2回目は同じ対応は行えないと言ってましたね。

まとめ(`´)

原因もわからない、お金が全額返金されるわけでもなくこの結果には大変不服なんですが、仕事も忙しかったしもう話終わらせたい気にもなった。完全に負けです。

もうスマフォはアプリの試験として使うだけで、simカードガラケーに戻そうと思っています。

cocos 2dx メモ(整理するまでcppのないようも含んでると思う

xcodeで作ったクラスをandroid用にビルドする時には、Android.mkにクラス名を追加

HelloCocos/proj.android-studio/Android.mk

android-studioでビルドしているのでこのディレクトリは以下のAndroid.mkを編集する

LOCAL_SRC_FILESにcpp名を追加する

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../../Classes/AppDelegate.cpp \
                   ../../../Classes/HelloWorldScene.cpp \
                   ../../../Classes/LogoScene.cpp \
                   ../../../Classes/MainMenuScene.cpp \
                   ../../../Classes/HighScoreScene.cpp

android用にビルド

cocos2d-x-3.10//tools/cocos2d-console/bin/cocos run -s ~/snk_cocos/snk -p android --android-studio

毎フレ呼ばれるupdateメソッドを使う

事前にinitとかで以下のcocos2d::Node#scheduleUpdateを呼んでおく必要がある

this->scheduleUpdate();

updateメソッドがマイフレ使える

void update(float dt);

リファレンスカウンタ

snoopopo.hatenablog.com

インクルードガード、宣言と定義

・メンバがポインタの場合は、宣言でいい。定義はいらない=ヘッダをincludeしてクラスの定義を読み込む必要がない。

・引数、戻り値も宣言でいい。

・メンバが実態の場合は、定義を持つ必要がある。

・意識せずにヘッダを2回includeしててclassが二重定義になってエラった → インクルードガードすればOK。

⇒基本的に全部のヘッダはインクルードガードする!

#ifndefマクロは、xxが定義されてなければ #endifまでで囲った処理を実行する、という意味なので、 これで、クラスの定義が1度しか呼ばれないことになる。

#ifndef  _PART_H_
#define  _PART_H_ //1回目のみ呼ばれる

namespace cocos2d {
    class Vec2; //cocos2d::Vec2というクラスがあるよ、という宣言。Vec2はポインタで持っているので定義はいらない
}

class Part : public cocos2d::Node
{
    
public:
    Part(cocos2d::Vec2* pos);
    ~Part();
    Part* getPos();
    void setPos(Part* pos);
private:
    cocos2d::Vec2* _pos;
};

#endif // _PART_H_

rand()

cppでランダムな数値を取得するにはrand()が使える

rand() % 3;

上記の例は、0〜2までの値を取得できる。ランダムな数値を3で割った割った余は、0〜2の数字だからだ。

Action

cocos2dxにもlibgdxと同じでActionの概念がある。

・NodeにrunActionメソッドを持っているのでそれに登録してあげればいい。

//3秒で180度回転。単位は「度」でOK
runAction(RotateBy::create(3, 180));

・上記のままだと等速で処理を行うのでだんだんはやくしたりとかしたい場合はイージングを設定する

runAction(EaseIn::create(RotateBy::create(3, 180), 2));

・単純にxxの処理をしたい、という場合はCallFuncNを使う

    auto print = CallFuncN::create([this](Node* node){
        printf("aaaaaa");
    });

・シーケンス 順次実行 Sequence

auto rotate = EaseIn::create(RotateBy::create(3, 180), 2);
auto scale = EaseIn::create(ScaleBy::create(1, 0.5f), 3);
auto action = Sequence::create(rotate, scale, NULL); //最後は必ずNULLを設定しないとダメ
    
runAction(action);