投稿

2015の投稿を表示しています

2次元配列のコピー::JavaScript

配列の中身のコピーは.slice()を使えば出来る。 しかし、2次元配列など、配列の中身が配列の時は、参照がコピーされてしまう。 例えば、 var array = new Array(3); var copied = new Array(3); for(i=0;i<3;i++){ array[i] = new Array(3); copied[i] = new Array(3); for(j=0;j<3;j++){ array[i][j] = 0; copied[i][j] = 0; } } copied = array.slice(); console.log("before array:",array[0][0]); copied[0][0] = 1; console.log("after array:",array[0][0]); console.log("before copied:",copied[0][0]); array[0][0] = 2; console.log("after copied:",copied[0][0]); というようにすると、一方の配列を書き換えるともう一方も変わってしまう。(と言うより同じものを参照している) before array: 0 after array: 1 before copied: 1 after copied: 2 ので、 var array = new Array(3); var copied = new Array(3); for(i=0;i<3;i++){ array[i] = new Array(3); copied[i] = new Array(3); for(j=0;j<3;j++){ array[i][j] = 0; copied[i][j] = 0; } } for(i=0;i<3;i++){ copied[i] = array[i].slice(); } console.log("before array:"

JavaScriptでライフゲームを作ってみた

Move Stop Reset クリックでパターンを作れます。 JavaScriptを始めてから5時間くらいで作れました。 練習用の課題としてライフゲームの実装はとても適してるのではないでしょうか。 BloggerでJavaScript貼り付ければ動いてくれるのは便利です。 自動セミコロン挿入は驚きましたが、気にせずセミコロンを書けばいいことがわかったので問題ありませんでした。 ブロックスコープじゃないのも戸惑いました。こっちはまだちゃんと理解できてないのではないかと思います。 参考にしたサイト とほほのJavaScriptリファレンス 初めてのHTML5ゲーム作成 JavaScript のスコープを理解する-tacamy.blog JavaScriptの自動セミコロン挿入-本の虫 http://noidgames.web.fc2.com/lifegame.html 一応コードも貼っておきます。 <style type="text/css"> #canvas1 { display: block; width:320px; background-color:black; } </style> <script type="text/javascript"> //明示的にグローバル変数を宣言 var canvas1; var ctx; var field = new Array(32); // フィールド情報 var isMove = 0; for(i=0;i<field.length;i++){ field[i] = new Array(32); for(j=0;j<field[i].length;j++){ field[i][j] = 0; } } window.onload = function() { canvas1 = document.getElementById('canvas1'); ctx1 = canvas1.getContext('2d'); canvas1.addEventList

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-iOS編その2

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-iOS編その1 の続き。 前回Twitterにログインしたので、今回はシングルツイートの取得とユーザタイムラインの取得をします。 シングルツイートの取得 std::string NativeLauncher::showTweet(){ NSURLRequest *request = [[[Twitter sharedInstance] APIClient] URLRequestWithMethod:@"GET" URL:@"https://api.twitter.com/1.1/statuses/show.json" parameters:@{@"id":@"xxxxxxxxxxxxxxxxxx"} error:nil]; NSURLResponse *response; NSError *err; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; std::string tweet_text = [[jsonObject valueForKey:@"text"] UTF8String]; return tweet_text; }; xxxxxxxxxxとなっている所にツイートIDを入れてください。 NSDataが帰ってくるので、NSJSONSerializationでNSDictionaryに変換します。 valueForKeyの"text"のところを変えると他の情報も取得できます。 他のパラメータや、データの構造は、 GET statuses/show/:id を見て

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-iOS編その1

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その4 の続き。 Twitterにログインするところまで。 Fabric のXcode用プラグインをインストール fabricユーザー登録から、プラグインのインストールまで このページが丁寧に説明してあって分かりやすいと思います。 すでにユーザ登録してある人は、そこは飛ばしてください。 プロジェクトにSDKを追加する [iOS] Fabric 入門 #1 アカウント登録 & Twitter Kit を使ってログインする 今度はこのページを見ながら。ネット上の資産は有効活用しましょう。 Run Script Build Phaseについては、公式 How to Add a Run Script Build Phase で解説されています。 Run Scriptを追加した後に、以前NativeLauncher.hで宣言した関数が無いとビルドできないので、 NativeLauncher.mmに #include "NativeLauncher.h" void NativeLauncher::loginTwitter(){ }; std::string NativeLauncher::showTweet(){ std::string tweet_text; return tweet_text; }; std::vector<std::string> NativeLauncher::showUserTimeline(){ std::vector<std::string> userTimeline_text; return userTimeline_text; }; と空の関数を用意しておきます。 Twitterにログインする AppDelegate.mに記述ところはCocosだとAppDelegateがcppファイルなので、NativeLauncher.mmのloginTwitter()に書きます。 TwitterLoginButtonもNativeLauncher.mmのloginTwitter()に書きますが、viewには

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その4

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その3 の続き ではいよいよ最終目標のユーザタイムラインの取得をします。 今回もまたAppActivityでメソッドを作ってNativeLauncherにjniを追加します。 AppActivity.java static String userTimeline_text[]; public static String[] showUserTimeline() throws InterruptedException{ final CountDownLatch cdl = new CountDownLatch(1); final int count = 5; StatusesService statusesService = Twitter.getApiClient().getStatusesService(); statusesService.userTimeline(null,null,count, null, null, true, false, true, true, new Callback<List<Tweet>>() { @Override public void success(Result<List<Tweet>> listResult) { String text[] = new String[count]; int tweetNum = 0; for (Tweet tweet : listResult.data) { text[tweetNum] = tweet.text; tweetNum++; } userTimeline_text = text; cdl.countDown(

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その3

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その2 の続き。 前回Twitterにログイン出来たので、 Rest API が使えるようになります。 今回はシングルツイートの取得をします。 AppActivity.java AppActivityでツイートのテキストを返すメソッドを作ります。 まずはコード static String tweet_text; public static String showTweet() throws InterruptedException{ final CountDownLatch cdl = new CountDownLatch(1); tweet_text = null; StatusesService statusesService = Twitter.getApiClient().getStatusesService(); statusesService.show(xxxxxxxxxxxxxxxxxL, null, null, null, new Callback<Tweet>() { @Override public void success(Result<Tweet> result) { tweet_text = result.data.text; cdl.countDown(); } public void failure(TwitterException exception) { System.out.println("failure"); } } ); cdl.await(); return tweet_text; } xxx

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その2

イメージ
Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その1 の続き。 今回は前回作ったloginTwitter()をjniを使ってcocos2d-xから呼び出します。 jniを使える環境を整える まずはjniを使えるようにします。 Xcodeでやったほうが楽だと思います。 ここのサイトがとてもわかり易いので見てください。 cocos2d-xでiOSとAndroidの処理を分ける ※Android.mkはproj.android>jniに有ります。 jniを使ってloginTwitter()を呼び出す cocos2d-xでjniを使ってみる を参考にしながら進めていきます。 jniを使ったことがある人は特に迷うことは無いと思います。 NativeLauncher.h #ifndef helloWorld_NativeLauncher_h #define helloWorld_NativeLauncher_h class NativeLauncher{ public: static void loginTwitter(); }; #endif NativeLauncher.cpp #include <jni.h> #include "NativeLauncher.h" #include "platform/android/jni/JniHelper.h" using namespace cocos2d; #define CLASS_NAME "org.cocos2dx.cpp.AppActivity" void NativeLauncher::loginTwitter(){ JniMethodInfo JMI; if (JniHelper::getStaticMethodInfo(JMI, CLASS_NAME, "loginTwitter", "()V")) { JMI.env->CallStaticVoidMethod(JMI.classID, JMI.methodID); JMI

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その1

イメージ
ツイートを使ったゲームをCocos2d-xで作りたかったので、 Twitter Kit(Fabric) を使って、ツイッターのユーザタイムラインの取得をやってみました。 事前にAndroidネイティブでTwitterにログインするところまでやっておくと分かりやすいと思います。 まずはCocos2d-xのプロジェクトを作ってEclipseにインポート。 わからない人は、こことか Cocos2d-x 3.4でandroid向けにビルドする 次に、FabricをEclipseにインストール こことかを参考にしながら、 fabricユーザー登録から、プラグインのインストールまで ここで登録をして、 https://get.fabric.io/ ここを見てください。 Fabricの導入(Twitter SDK) 出来ましたでしょうか。 こんなかんじにツールバーに追加されていて、ログインできていれば成功です。 Twitter Kitの導入とログイン 先ほどのFabricの画面で、追加したいプロジェクトを選択して、Next Checking...がUnknownになるのを待ってから、TwitterのUnknownをクリック。 一番下のLog in with Twitterをselect AndroidManifestに関しては、指示通りにコードを追加してください。 次のStartActivityはAppActivityに書きます。 onCreateメソッドが無いので、そこは丸々コピペしますが、setContentViewの行は使わないので消します。 Bundleをimportしたりして、最終的にはこんなかんじになります。 アラートが沢山出ますが、導入が終わると消えるので気にしないでください。 package org.cocos2dx.cpp; import org.cocos2dx.lib.Cocos2dxActivity; import io.fabric.sdk.android.Fabric; import android.os.Bundle; import com.twitter.sdk.android.core.TwitterAuthConfig; import com.twitter.sdk.and

Cocos2d-x 3.4でandroid向けにビルドする

プロジェクトすでに作られている前提で。 eclipseを開く File>import Existing android code into workspaceで、 プロジェクトファイル/cocos2d/cocos/platform/android/javaを指定してimportする。 import したlibcocos2dxのsrc/org.cocos2dx.lib/Cocos2dxWebViewの中の import android.annotation.SuppressLint;でエラーが出てたら、 libcocos2dxのプロパティ>androidで、APIレベルが16以上のTarget Nameを選択してOKするとエラーが消える。 もう一度、File>import>Existing android code into workspaceで プロジェクトファイル/proj.androidを指定してimportする。 こっちもAppActivity.javaでエラーが出るなら プロパティでAPIレベルが16以上のTargetを指定する。 それでもダメなら、プロパティ>android>libralyのところが赤い×になっていないか確認 なっていたら、一旦RemoveしてからAddして、先ほどのlibcocos2dxを選択する。 RunAs>android application ver3.1の時よりも簡単になった気がする。