SSブログ
Macでゲームをつくろう! ブログトップ
前の10件 | -

NS…自分の中身を読みたかった。 [Macでゲームをつくろう!]

もっとスマートな方法があるのかもしれないけれど、
アプリケーションとして作ったAPPファイルの中身を参照するにはどうしたらいいかと悩んでましたが
ようやく、解決しました。<おそいなぁ。
以前にも書いた事があるのですが、Macのアプリケーション(OS X以降)では、実行ファイルであり
フォルダもであるという不思議な構造になっているのです。
確かめるには、実行ファイルの拡張子である”.app”を外してみてください。あら不思議、あっという
間にフォルダに変化して中身が見えるようになりますよね。(右クリックで『パッケージの中身を見る』
でも、見る事が出来ます。
条件を満たしてあれば、フォルダがappの拡張子を付けるだけでアプリケーションになるんですね。
(まぁ、その条件が普通は難しいのですが)
ということで、アプリケーションであり、フォルダでもある.appファイルの中に入れた書類を読み出す
ようには出来ないかと考えてみました。

結構簡単でした、(涙)

tell application "Finder"
set add1 to ((path to me) as text) & "Contents:Resources:"
end tell

set add1 to add1 & "test.txt"
try
set fileNo to open for access file add1
set answ to read fileNo -- using delimiter {","} as text
end try
close access fileNo

set contents of text field "textField1" of window "main" to answ


open ー access を使うのは解っていたのですが、なかなかうまく使えなかったのがありますが
どこにアクセスしたらいいのかも悩みでした。
アプリケーションが今どこにおいてあるのか不確定なものですから、それを調べてやらなければいけません。
それが、(path to me) です。
これで、どこにおいてあろうと.appのある場所を割り出せます。
後はフォルダの中のリソースフォルダを指定してやれば良いのですね。
一度テキストにしているのは、コレが一番エラーにならなかったからですが、次の難題はエイリアスの扱い
かなぁ。それはまたいつか…。
そしてopen for accessの時になって初めてfileのアドレスに切り替えれば使えますね。

では実際に使ってみましょう。

全図.png

デスクトップにも読みにいきたいファイルの元がありますが、これはXcodeに読み込ませる多ものものです。
ビルドをするとちゃんと、リソースの中にコピーされています。でも、デスクトップのやつを消すと、次回
のビルドからファイルが無いぞ!と怒られるのでこのまま・・・。
本当は、どこかに集めておくのがいいんですよね。

実行図.png

書類の中身はテキトウですが、ちゃんと読み込まれているのが解ります。

上のスクリプトの中に、
-- using delimiter {","} as text
と、コメントアウトしている部分がありますが、これは読んだ書類を切り分ける指示が出来るスクリプトなのですが
日本語ではうまくいかないので使いません。
半角英数字のみの書類でやりたいという人がいれば使えますので参考までに。

nice!(0)  コメント(0) 

AppleScriptで1/100(100分の1)秒を計れないか?【Mac】 [Macでゲームをつくろう!]

こちらの記事は古い上に不正確な計測ですので、別記事のミリ秒計測の項目をご覧くださいい。
(管理人: 1015.10.28修正)



やってみました。

AppleScriptでは1秒以下の時間を取得できる方法が基本的に有りません。
スクリプト自体の動作の遅さから作らなかったのか、それ以上求めるなら
Object-CなりJavaなり他の言語でも使えと言わんばかりですが、
どうしてもAppleScriptのみで何とかならないか? と、考えてみました。
しかしAppleScriptでシステムから直接ミリ秒を取得することができる逃げ
道が見当たらないので、簡易的なスクリプトを考えてみました.


(*初期設定*)
property mSec : 0 --スクリプト全体で変数|mSec|を共有できるようにします

(*メインルーチン*)
on run
WaitTimeReset(1) --(*リセットするサブルーチンを呼び出しています*)
WaitTime(50) --(*一時停止する時間を決めその時間分止めるサブルーチンを呼び出しています*)
end run

(*これよりサブルーチン*)
on WaitTimeReset(rp)
set a0 to time of (current date)
repeat
set a1 to time of (current date)
if a1 is not a0 then exit repeat
end repeat
set b to 0
repeat
set b to b + 1
set a2 to time of (current date)
if (a2 - a1) < rp then
--
else
exit repeat
end if
end repeat
set mSec to (b / rp) as integer
return mSec
end WaitTimeReset

on WaitTime(x)
set b to -1
set c to (0.01 * mSec * x)
repeat
set b to b + 1
set dammy to time of (current date)
if b < c then
else
exit repeat
end if
end repeat
end WaitTime

続きを読む > ここからスクリプトの説明です


nice!(0)  コメント(0) 

ウインドウを画面の真ん中に【Xcode】 [Macでゲームをつくろう!]

Xcodeでせっかく作ったウインドウも、自分だけで使うのならまだしも 他の人が使うものを作った場合に 真ん中に表示されないなんて事があったら、ちょっと寂しいですよね.
通常は、インタフェースビルダで 配置して作成した位置がそのまま反映されてしまうのですが、
window.png
これをなんとかして どんな大きさのウインドウでもセンターに表示してみたいですよね。
というところで、AppleScriptで考えてみました.

まずは、表示のベースとなる画面(デスクトップ)の大きさを取得しましょう。

tell application "Finder"
  set disktop_size to bounds of window of desktop
end tell
(ヒント:スクリプトは後ろ(右)の方から読むのが基本ですからね.)

「デスクトップというウインドウ」の表示されている座標を”bounds”で読み取って、変数の|disktop_size|に代入しています。
※ おっと注意です。Desktopはファインダの部品ですので "Finder"の宣言するのをお忘れなくをお忘れなく。

取得した値は、配列変数になっています。
>  { 0, 0, 1280,1024}
この値は、左から画面の原点からみて、x軸の0・y軸の0 のポイントから x軸の1280・y軸の1024 までの表示をしています。ということなので、基本的に0ポイントは変わりないので、配列変数のitem 3を横幅(w)、item 4を高さ(h)で取得すればデスクトップの大きさが測れます。
(基本的にわです。場合によっては、画面の上にあるメニューバーの22ピクセルを差し引かなければいけない場合も有りますが面倒なんで無視します)

 画面の大きさが解ったら、次は表示したいウインドウの大きさを取得します。
今回は”main”と名付けたウインドウを例にあげます。

set meinwindow_size1 to bounds of window "main"
set meinwindow_size2 to size of window "main"
※ちなみに、こちらはFinderとは無関係ですので、ファインダ宣言をした中では使用しないでくださいね。

|meinwindow_size1|という変数には、先ほどのような bounds を使って取得していますから 対角の角と角を調べています。
もうひとつの|meinwindow_size2|はなんでしょう?
 ”size”というスクリプトを使いウインドウの大きさを測っています。
・・・え? サイズが測れるならば、デスクトップの大きさもこれで測れたのでは? と思うでしょうが、実はここにはからくりがあります。前の例の"Finder"は宣言をすると "size"のスクリプトの使い方が変化してしまうのです。つまり、デスクトップの使用している容量を取得しようとしてしまうので、広さを測る意味では使用できないんですね。まぎらわしいです。

さて、測った物の|meinwindow_size1|に代入された数値は使用しません。あくまでも、こんな感じも使えますという事なので、ごめんなさい。
使うのは変数|meinwindow_size2|の { 横幅(w), 高さ(h) }です。

あとは、「デスクトップの横幅」から「ウインドウの横幅」を差し引いて、左右に均等に割り振るために2分の1にします。
高さも同じように計算しておきます。
その数値を座標を入れ込めば、あっという間にウインドウが真ん中に来ますよ。

スクリプトも用意してありますので、参考にしてください。

<<今回のスクリプトはこちら>>


nice!(0)  コメント(0) 

1/10秒が計れたらもっと正確になるのに・・・【AppleScript】 [Macでゲームをつくろう!]

何かの連続した処理をするときに、それぞれのマシンスペックで同じ早さで動いてほしい場合が有ります。
1秒単位で計れば良いというものであれば 簡単にできるのですが、それより早いものを制御するにはどうしたら良いのでしょう?

そこで考えました。
あらかじめそのマシンが処理にかかる時間を計り、それに比例した負荷をかけてやれば良いのではないかと思ったのですが・・・
とりあえず、repaet文で1000回繰り返せばそれなりの時間が計れるのではないかと思ったのです。
ピクチャ 1.png
『実行!』
ピクチャ 2.png
あれ?
0秒ですか?
あれほどアップルスクリプトの処理は遅いといわれ続けてたので意外でした。

じゃぁ、2桁増やして100000回では?

続きを読む


nice!(0)  コメント(0) 

NSMenu&表示非表示{Mac Xcode} [Macでゲームをつくろう!]

前回での本当に言いたかった部分は「visible」の使い方だったのですが 脱線(?)してました。
visible of 〜 は表示/非表示の設定をするものですが、いろいろなところで使い方を見ると、必ずと言ってよいほど フラグ(状態の判定)を別に記憶してからそのフラグに対して 表示や非表示の切り替えをしているんですよね。

property visible_flg : false

on windowObj()
if visible_flg is true then
set visible of window "main" to false
set visible_flg to false
else
set visible of window "main" to true
set visible_flg to true
end if
end windowObj

(ちょっと、わざとらしいほど回りくどく書きましたが)

今の状態を記憶して他に使う事が無いのだったら、propertyすら使わない次のような1行で出来るんではないですかね?

set visible of window "main" to not (visible of window "main")

直接、visible of 〜 の状態を呼び出し not で反対の意味にして書き込んでしまうんですが、
現在の状態をリアルタイムで呼び出すのですから 間違いは無いですよね?

これは、例えばアバウトウインドウを呼び出して閉じるという部分で使えると思います。
メニューから呼び出して、メニューで閉じる他に イレギュラーなクローズボックスをクリックして閉じても もう一度メニューから呼び出せばちゃんと開いてくれますしね。

続きを読む


nice!(0)  コメント(0) 

表示/非表示を切り替える(MacAppleScript) [Macでゲームをつくろう!]

Xcodeでドリフネタをやってみる。(ドリフを知らないお子様はお父様かお母様・・・いやいや、お爺様かお婆様に聞いてみよう)
なんていっても、全員集合のコントの中の、開いた引出しを閉めると違う引出しがせり出してくるというネタをボタンで表現してみるものです。
ピクチャ 1.png
インターフェースビルダーで写真のようなボタンを4つ作り、それぞれの“(AppleScript)Name:”を“hikidashi1”から“hikidashi4”と付けます。
タイトルも適当に”ひきだし1“〜“ひきだし4”と解りやすいように付けます。
上の写真のように“Clicked”と“Script”にある“….applescript”にチェックを入れておきます。4つとも全て。
“ひきだし1”はそのままで”ひきだし2”〜“ひきだし4”の3つのHiddenにチェックを入れます。(編集画面では色がつきます)
最後にボタンの後ろにある“Window”の(AppleScript)Name:には“main”と付けておきます。


続きを読む


nice!(0)  コメント(0) 

Macとイベントおつかれさまでした。 [Macでゲームをつくろう!]

先日、ビックサイトにいかれた方々。おつかれさまでした。
土曜日に東京ビックサイトでのイベントスペースでお話しできた方々にはとても感謝です。
おもしろかったですね〜。
Macの話だけでなく、印刷業界のお話も出来てよかったです。
またいつか、お会いできる事を楽しみにしています。

さて、当日出展しましたMacでゲームを作ろうの本は、まだまだ先が有るのでこれから補填をしていこうというところなのですが 一度出来たら 園後に『全否定』をしなければいけません。<なぜ?
なんて、大げさな事ではないのですが、本の中ではいきなり内容が進む画面が出てました。
でも、普通のゲームってタイトルの部分が先に有りますよね?
あえて虫をして本を書いてみました。
なにせ、そこから始めると かなり説明が長引くためで 簡単なところから始めなければというほんの趣旨からはなれてしまうような気がしたからです。
まぁ、次回のサンシャインクリエーションでは、この辺も補填をして本にしたいと思います。

当日は、あんなしょぼい本にもかかわらず 購入をしていただいた方々に感謝をしつつ ちょっとだけご報告させていただきました。
nice!(0)  コメント(0) 

NSWindow(その3)【Xcode/Applescript】 [Macでゲームをつくろう!]

NSWindowを操作するための、割と簡単なAppleScriptです。

NSWindowの(apple script)nameを"main"にしている設定です。

1)ウインドウのタイトルバーの表示を変えてみる。
set title of window "main" to "変更したい内容"
(set |受ける側の変数| to title of window "main" と左右逆に入れ替えるとタイトルを受け取る事が出来ます。)

2)サイズを変える
set size of window "main" to {|横幅|, |高さ|}
(上のように逆にすれば読み取る事が出来ますが、配列として読み込まれます。item 1(横幅),item 2(高さ))

3)位置を変える
set position of window "mein" to {|横位置|, |縦位置|}
(逆にすると・・・扱いは上記とにてます。)

4)ウインドウを隠す(見えなくする)
set visible of window "main" to |真偽値|
|真偽値|にfalseと入れると隠れます。
|真偽値|にtrueと入れると見えるようになります。

5)アルファー値(不透明度)を変える
set alpha value of window "main" to |0.0(透明) 〜 1.0(不透明)|

他にもいろいろありますが、とりあえず簡単なところから。


下記は動作を見るためのテストファイルです。ご自由に。
(NSWindow以外にいろいろ部品を使っていますが、今回は説明を省きます。)
img3.png
(Xcode1.1〜1.5用[修正版])
http://www012.upp.so-net.ne.jp/cocomavi/window_test.zip
(Xcode2.0〜2.5用)
http://www012.upp.so-net.ne.jp/cocomavi/window_test1.zip

ウインドウの大きさを変えたりボタンやスライダーを動かしてみてください。
ちなみにスライダーを動かすと…。
img1.png
img2.png


動作的に、画面から見えなくなったままだと困るので、見えなくなった場合のみ 2秒後に復帰させるスクリプトにしてあります。

nice!(0)  コメント(0) 

NSWindow(その2)【Xcode/Applescript】 [Macでゲームをつくろう!]

ウインドウのサイズ指定をするInfoに触れてみましょう。
img_NSwindow03.jpg

Content Rectangle  ウインドウ自体の位置や大きさを設定する項目です。
  Bottom/Left:   ウインドウの左下を原点とした位置を指定できます。(x,y座標の原点(0,0)の位置はモニター画面左下です。)
  Top/Left:     ウインドウの左上を原点とした位置を指定できます。(x,y座標の原点(0,0)の位置はモニター画面左上です。)
  Bottom/Right:   ウインドウの右下を原点とした位置を指定できます。(x,y座標の原点(0,0)の位置はモニター画面右下です。)
  Top/Right:     ウインドウの右上を原点とした位置を指定できます。(x,y座標の原点(0,0)の位置はモニター画面右上です。)
(座標の数値は絶対数値なので”マイナス”にはなりません。)
  Width/Height:  ウインドウの大きさを指定します。(w:横幅 h:高さ(バーを含む))
  MaxX/MaxY:   ウインドウの最大値で設定します。(MaxX:モニター画面を対しての横座標 MaxY:同じく縦方向))

Lock    大きさを固定します。

Min w; h:  サイズの最小値を設定します。
Max w: h:  サイズの最大値を設定します。(上記のMinより小さい数値で設定すると制限がされません。)
(それぞれの後ろのボタン”Current”をクリックすると現在の大きさの数値が入ります。)

Auto Position  ウインドウのイラストにくるくるしたひもがつながったイラスト部分ですが
        こちらは、最初に開いた時のウインドウの位置をどうするかの設定です。
        いま、コイル上になっている部分をクリックすると直線に変わります。
        図のある側の位置を”成り行き”にする時はコイル状にする。
        図のある側の位置を設定値で反映させたい場合は直線にする。
(ただし、ここの設定はいつ反映されるのかが不明です。)

ヒント


nice!(0)  コメント(0) 

NSWindow(その1)【Xcode/Applescript】 [Macでゲームをつくろう!]

Xcode1.1の表示が面ですが2.5までは、微妙な違いがあれど使えるはず。(3.0以降は表示が…使い方は似たようなものですけどね)

NSWindow
 一番基本となるインターフェースの部品で 基本的な部品を配置するのに使うウインドウです。
この部品の上にボタンやテキストフィールドなどを置き使用できます。
img_NSwindow00.jpg
 上の写真の左がNSWindowの部品本体で、右はこの部品の設定ウインドウ(info)です。
よく使う部分の使い方や設定方法を説明していきましょう。

infoウインドウの最上部のPOPメニューから“Attributes”を選びます。
img_NSwindow01.jpg
Window Title: ウインドウの上部に表示されるタイトルバーに入る名前です。ここを変更すればタイトルが変わります。
Auto Save Name: 自動で保存をさせる時につける名前を入れておきます。

Controls: ウインドウの上部に表示されるバーの左側にある3つボタンの設定です。
  Miniateurrize   中央にある「縮小化」を有効にする場合にチェック。
  Close   左にある「閉じる」を有効にする場合にチェック。
  Resize   右にある「サイズの最適化」を有効にする場合にチェック。

Backing: 描画に関する設定です。
  Nonretained   NSWindowの後ろになった部分の描画は無視されます。容量が食わない分移動した時にちらつきが目立ちます。
  Retained   NSWindowの後ろになった部分の描画用のメモリーが用意され移動した分だけコピーされます。容量は少ないですが多少ちらつきますがNonretainedほどではないです。
  Buffered   NSWindowとOSの描画データが両方用意されます。ウインドウが移動すると即座にOSの描画がリフレッシュされます。メモリー容量が倍以上必要になりますが ちらつきが気にならなくなります。

Release when closed 閉じた時に自動的にインスタンスを解放します。
Hide on deactivate アプリケーションが選ばれていない状態の時は非表示にしたい場合にチェック。
Visible at launch time アプリケーションを実行した時点でウインドウを表示にしたい場合にチェック。
Deferred
One shot
--
--
Has texture ウインドウの表示を(メタリックのように?)かえる時はチェック。
Has shadow ウインドウに陰を表示する場合はチェック。
Display tooltips when app is inactive
appが不活発な場合、tooltipsを表示します。(不活発?)

(謎な部分もなりますが、デフォルトのままでいいと思います)

続きを読む


nice!(0)  コメント(0) 
前の10件 | - Macでゲームをつくろう! ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。