Xcode 4 と Xcode 3 との併用

Xcode 4 をインストールしてみたらなんと英語版。「なんだー」と思っていたら、Xcode 3 との併用も可能らしいので、Xcode 3 を再びインストール。手順については下記を参考にさせていただきました。感謝。

で、インストールしてXcode 3 で以前作ったモノを開いてみたら、プロジェクトに含まれるコードのほとんどが赤字(存在しない)状態で、かつ左上はBase SDK Missingに…。

調べてみたら、プロジェクト>プロジェクト設定の編集で「一般」を選択して「パス」欄を見ると、Xcodeのルートディレクトリが起点になっているようです。なので・・・
  1. プロジェクトファイル一式をXcode3のルートディレクトリに移動。
  2. プロジェクト>プロジェクト設定の編集で「一般」を選択して、「すべての構成のベースSDK」を「Latest iOS (iOS 4.3)」に変更。
  3. プロジェクト>プロジェクト設定の編集で「ビルド」を選択して、「iOS Deployment Target」など必要な項目を設定する。
  4. プロジェクト>アクティブSDKを設定>Simulator に切替。
と設定し、やっとiOSシミュレータで起動するようになりました。やれやれ。
インストールばかりやってないで、いい加減まともなアプリを1本つくらないと…(^^;。
Base SDK Missingについては、過去の記事「XcodeのBase SDK Missing」もご参照下さい。

外接円を描いてみた

ここのところ必要に迫られて、いろいろ図形の描画をしました。で、前回のカスタム線に続いて、今度は外接円を描きました。サンプルはこちら
円の公式(r*r = (x – a)* (x – a)+(x -b)*(x -b))と3点の座標から連立方程式を作って、解いただけです。…と書くと簡単そうですけど、ASの式にするのに結構手間がかかりました。数学苦手だし(笑)。スクリプトはこんな感じです。
//3点から円を描く
function drawCircleFromPoint()
{
//任意の3点から円の半径、中心点を求める
//(3点の座標と円の公式の連立方程式)
var A:Number = Math.pow(point1.x,2) – Math.pow(point0.x,2) + Math.pow(point1.y,2) – Math.pow(point0.y,2);
var B:Number = point1.y – point0.y;
var C:Number = Math.pow(point2.x,2) – Math.pow(point0.x,2) + Math.pow(point2.y,2) – Math.pow(point0.y,2);
var D:Number = point2.y – point0.y;
var E:Number = point1.x – point0.x;
var F:Number = point2.x – point0.x;
var b:Number = (F*A – E*C)/(B*F – D*E)/2;
var a:Number = (C – 2*b*D)/(2*F);
var r:Number = Math.sqrt(Math.pow(point0.x – a,2) + Math.pow(point0.y – b,2));
//求めた円を描画
var sp_gr:Graphics = sp.graphics;
sp_gr.clear();
//円;
sp_gr.lineStyle(1,0x00FF00,1);
sp_gr.drawCircle(a,b,r);
//中心点;
sp_gr.moveTo(a-3,b-3);
sp_gr.lineTo(a+3,b+3);
sp_gr.moveTo(a-3,b+3);
sp_gr.lineTo(a+3,b-3);
}

※point0,point1,point2はそれぞれ円のmcを指します(サンプル参照)。

いざ書こうとすると意外と面倒なのでメモとして。あんまり用途がないかもしれませんけど…。

Arrayの落とし穴(2) – ゼロの配列

普段あまり使わないのだけれど、Arrayは・・・

var array:Array = new Array(0,2)

とやっても生成できます。で、たまたま横着してこの方式で・・・

array = new Array(0)

とやって、array[0] == 0 になると思ったら、要素ゼロの配列になってしまい、しばらく「何でだろうな??」とはまってしまいました。ヘルプ通りの仕様なんですけどね。

var array:Array = new Array(0,2)
trace(array,array.length) >> 0,2 2
array = new Array(0)
trace(array,array.length) >>  0

まあこんなコトで躓くこともないと思いますが、自分ではまたやりかねないのでメモ。

素直にこうすれば、何の問題も起きないんですけどねw。
array = [0]
trace(array,array.length) >> 0 1

[追記]2011.5.11
野中さんから情報いただきました。初期化は[]を使う方が速いらしいです。

いろんな線を描くクラスを作ってみた

GraphicsでmoveTo,lineToで線を描く時に、Flash上でできる破線、点線などの描画が出来ない。みんなどうしてるのか・・・と調べると、結局自作するしかないようなので、CustomLine用のクラスを書いてみました。点線、破線、波線、二重線に対応してます。サンプルはこちら
こういうのって汎用ライブラリはないのかな〜。役に立つようならwonderflにでも投稿してみようかしらん。でももうあるかな?
この手のいいライブラリがあったら教えて下さい。