ひっそりとLingo....Part2

このエントリーをはてなブックマークに追加
935500h:03/09/16 23:20
あれ。かけた。
936仕様書無しさん:03/09/17 01:03
>>933
なんか乳臭い板だなぁ・・・
937仕様書無しさん:03/09/17 17:08
>>930
Xtraもないよーです。探し方が悪いのかなぁ。
しかし、悲しいくらい数学関係は貧弱ですねぇ。
asinとかacosくらい用意してもらいたいものです...
938仕様書無しさん:03/09/17 17:10
>>937
であれば、webならjavaだし
クライアントならvbでいいじゃないの?
適材適所だろうに
939仕様書無しさん:03/09/17 21:50
>>937
>asinとかacosくらい
atanからすぐ作れるべ。
acosやasinが必要になるって事はatanからはじき出す方法も知っていると
思うんだが・・・
940仕様書無しさん:03/09/18 00:32
>>937
FLASHのMathオブジェクトならできる。
FLASHスプライト作ってFLASHに計算させるとよい。
941仕様書無しさん:03/09/18 02:22
>>938
俺もそう思うんだけどDirectorでなきゃダメなんです。
悲しきかな、下請け...(正確には孫請けですが..)

>>939
はい、どちらも自力で実装しました。
複素数の処理も参考書読みながらなんとか実装しました。
はぁ、疲れた...。




942仕様書無しさん:03/09/21 17:21
リスト変数の再設定について質問です。

たとえば
 a=[1,2,3,4,5]
というリストを作って使用し、その後
 a=[7,8,9]
などとリストaを再設定した場合、前に設定したリストは
ちゃんと自動的にメモリー上から削除されるのでしょうか?
それとも再設定する前にdeleteAllなどで自分で消さないといけないのでしょうか?

同様に二次元配列としてリストを入れ子にした場合、たとえば
 b=[[1,2],[3,4],[5,6]]
と二次元配列を作った場合、
 b=[]
とすれば入れ子にしたリストはメモリからすべて消えるのでしょうか?

このような使い方をするとメモリがどんどん消費される
のではと心配になったのでアドバスよろしくお願いします。
943暇人:03/09/22 02:46
>>942
僕も、それは昔から疑問に思ってました。
…で、以下のようなスクリプトをフレームレート999fpsで
ぶん回してみながら、メモリインスペクタを見ていると
プログラム使用メモリが増えたり減ったりしている事から
data=[]でdata.deleteAll()と同じ効果があると思います。

global data
on exitFrame me
if voidP(data) then set data = []
 set temp = []
 repeat with i = 1 to 1000
  temp.append(0)
 end repeat
 data.append(temp)
 if count(data)>10000 then data = []
 go to the frame
end
944942:03/09/22 11:23
暇人さん、どうもです。
なるほど再設定すれば以前設定されていたものは
自動的にメモリから削除されると考えていいようですね。
これからは安心して使用できます。
ありがとうございました。
945500h:03/09/23 05:29
たぶんどっちでも一緒だと思うけど

data = void

の方がすっきりするかもしれないですね。
1KB2KBをどうこう言う時代じゃないので、
気にし過ぎといえば気にし過ぎかもしれませんけど。
946仕様書無しさん:03/09/24 12:47
質問です。
set the colorでテキストキャストメンバーの色を指定する際、rgbで指定すると
変更前のrgb値の影響を受けてしまうのは何故なんでしょうか?
例えば、rgb(100,100,100)のテキストキャストメンバーをset the colorでrgb(200,100,100)と指定すると
実際の値よりも明度が高い色に変更されます(rgb(250,150,150)くらい)。

原因がわからず、困っております。
分かる方、どなたか教えていただけませんでしょうか〜。
947942:03/09/24 15:35
>>945
なるほど、完全に消す場合はvoidがいいようですね。
freeByte()で表示されるとメモリはすべて開放されてました。

また
a = [1,2,3,4,5,6,7,8,9]
b = a
と複数の変数でリストを参照する場合は
a = void
b = void
と参照する変数がすべてなくなった時点でメモリが開放されるのですね。
948500h:03/09/25 10:34
>>946
見た目は悪いかもしれませんが、一度 rgb(0,0,0)と指定してから
updatestage して、改めて rgb((200,100,100)としてみればどうでしょう?
あるいは単純にインクの問題か、
ステージの色深度が24bitではなく、他の色深度になっているとかで
動作が不安定になっているのかもしれません。

>>947
本来、宣言されていない状態がvoidなので、
0でも変数領域として何らかのワークは確保されているはずなので…
プロジェクタで納品するような案件ならともかく、
shockwaveなんかだとそれなりに効いてくるかもしれませんね。
949仕様書無しさん:03/09/25 13:08
>>500h
なるほど、やはり一度デフォルトの値に戻してからの方がよさそうですね。
ありがとうございます。
950インチキMAC使い:03/10/02 15:06
遂に3スレ目を迎えるところまできますたか。。。昼飯くってきます
951ドリ:03/10/05 14:59
キャストメンバー内にあるビットマップ。

@そのビットマップの一部分だけを切り取り、
Aステージの任意の位置に貼り付ける

っていうことはできますか?
952仕様書無しさん:03/10/05 15:42
stage to pict ってMXでも使えたっけ?
昔はStage外に配置したcastをstage to pictで切り取ってcastに突っ込んだ
りしたもんだが。

#いや、最近はこの手の事をやってなかったんで、よく調べて無いんだ :-)
953500h:03/10/05 19:13
>>951
できますよ。

>>952
ただ、MXに関しては不明。
954ドリ:03/10/05 21:04
>>953 500hさん
レスありがとうございます!
できるとわかった以上、とことん、調べてみます!
955仕様書無しさん:03/10/05 23:14
制御パネルですが「現在のフレーム数」のところにも何も表示されないし、
入力する事もできないのですがなぜでしょう。
WindowsXP, DirectorMX です。
956500h:03/10/06 07:52
>ドリさん

member("buf").image = member("pics").image.crop(0,0,100,100)
sprite(1).member = member("buf")

これでできると思います。
キャストの pictはオリジナルの画像ですが、
bufは一時的に切り取った画像を保管するためのキャストなので
ビットマップのキャストであれば中身はなんでもかまいません。

直接stageに描画することもできるかもしれませんが、
そこらへんは暇人さんあたりにおまかせします(笑)
957952:03/10/06 09:13
>>956
そっか、image objectってのが有ったんだっけ。
レガシースタイルな時代しかこねくり廻してなかったからなぁ。
リハビリが大変ですわ。

###

しかしなぁ、、、来年の春頃には「新バージョン」が出るだろうと想定して
いるんだけど、今度は中身がどう変わるのかなぁ。ちと心配。
958暇人:03/10/06 10:00
呼ばれてしまった(笑)

直接stageにimageを描画する事はできないです。
(できれば、楽しいんだけど…)
stageのimageを参照する事はできます。

自分はstageと同じ大きさのビットマップを作って
最前面に貼って色々と処理したりしてます。
(必要無い時は、外す)

最後に自分のよく使うサブルーチンを上げておきます
(copyPixelsの引数って面倒臭い)

on imageCopy img1, x1, y1, w1, h1, img2, x2, y2
img1.copyPixels( img2, rect( x1, y1, x1 + w2, y1 + h2 ), rect( x2, y2, x2 + w2, y2 + h2 ) )
end
959ドリ:03/10/06 10:26
できました、できました!
ヘルプも見ながらいろいろ確認し、
まさに理想どおりにできました。

Directorの掲示板でも別の案件で500hさんにはお世話になったので、
本当感謝です。
暇人さんもありがとうございます!
960500h:03/10/08 03:57
>>959
よかったですね(笑)
あちらで2ちゃんノリで書いていたらえらい嫌われましたな。私(汗
961hama:03/10/17 11:52
lingoで「お絵かきソフト」を作りたいのですが、マウスで動いたとおりに
線を描画すると、どうしても綺麗な自由線を描くことができません。
(Director MXのインストール先の下にある Learning\Lingo_Examples\imaging.dir
のように、フレーム間の点の集合になってしまいます)

この点の集合をスムーズな線に見せるため、以下のように、強引に
点と点の間にlineを引くという方法も試してみたのですが、penSize=1
のときはマシンによってはそこそこ綺麗に動くのですが、なぜか
penSizeを2以上にすると、線がおかしくなります。

何とかスムーズに曲線を描く方法はないでしょうか?

on mouseWithIn
global paintPos
penSize = 1
if (downingFlag = 1) then
if (prePos <> {}) then
nowPos = {mouseH(),mouseV()}

sprite(1).member.image.draw((prePos[1]-paintPos[1]),\
(prePos[2]-paintPos[2]),(nowPos[1]-paintPos[1])\
,(nowPos[2]-paintPos[2]),[#shapeType:#line,\
#lineSize:penSize ,#color:rgb(0,0,0)
prePos = nowPos
else
prePos = {mouseH(),mouseV()}
end if
end if
end
962暇人:03/10/17 14:10
>>961
試してみたら、drawのlineはlineSizeが2以上の場合は、その矩形内に収める為、
始点と終点を調整してしまう事に原因があるみたいですね。
解決方法としては、それとは逆に2以上の場合は矩形外に伸ばす処理を追加すれば
良いと思います。directorは矩形内に収める為にlineSizeの半分(半径?)を調整して
短くしているみたいなので、逆にその分を伸ばします。以下がそのソースです。↓


963仕様書無しさん:03/10/17 14:14
property pLoc

on beginSprite me
 pLoc = the mouseLoc
end

on exitFrame
 if the stillDown then
  ps = 7
  cl = rgb(127,191,255)
  nLoc = the mouseLoc
  if pLoc.locH >= nLoc.locH and pLoc.locV >= nLoc.locV then
   rc=rect(pLoc.locH+(ps/2),pLoc.locV+(ps/2),nLoc.locH-(ps/2),nLoc.locV-(ps/2))
  end if
  if pLoc.locH >= nLoc.locH and pLoc.locV <= nLoc.locV then
   rc=rect(pLoc.locH+(ps/2),pLoc.locV-(ps/2),nLoc.locH-(ps/2),nLoc.locV+(ps/2))
  end if
  if pLoc.locH <= nLoc.locH and pLoc.locV >= nLoc.locV then
   rc=rect(pLoc.locH-(ps/2),pLoc.locV+(ps/2),nLoc.locH+(ps/2),nLoc.locV-(ps/2))
  end if
  if pLoc.locH <= nLoc.locH and pLoc.locV <= nLoc.locV then
   rc=rect(pLoc.locH-(ps/2),pLoc.locV-(ps/2),nLoc.locH+(ps/2),nLoc.locV+(ps/2))
  end if
  sprite(1).member.image.draw(rc,[#shapeType:#line,#lineSize:ps,#color:cl])
  pLoc = nLoc
 else
  pLoc = the mouseLoc
 end if
end
964名無し:03/10/17 20:02
初心者の質問失礼します。インタラクティヴなムーヴィー用途で
ディレクターを買おうか悩んでいるのですが、LINGOはActionScriptより
わかり難いんでしょうか?自由度はフラッシュより広いんですよね。
何かあんまり情報ないので、将来性に不安で、投資に踏み切れないんですが、実際皆さん
皆さんそのあたりどう考えておられますか?
965hama:03/10/17 23:06
>>962
・・・素晴らしいです!
海外のサイトも含めて、かなりの数を検索したのですが、実現できている
ようなところはなかったので、半ば諦めていたのですが、お蔭様で
とうとう実現できました。

暇人様、どうもありがとうございました!
966仕様書無しさん:03/10/19 00:09
ひっそりと教えてください。
Lingoでテキストキャストのある行の文字の色を変える事はできるのでしょうか?
fontStyleでスタイルを変える事でできるようですが色の変え方が分かりません。
よろしくお願いします。
967仕様書無しさん:03/10/19 00:27
>> 966
こんな感じ。

-- 1行目の色を赤に
sprite(me.spriteNum).member.line[1].color = rgb(255,0,0)
968966:03/10/19 00:44
>>967
うわ、文字の色変わったです。ありがとうございました。
ちなみにある一行の文字の背景の色を変えるっていうのはできないですよね?
969仕様書無しさん:03/10/19 22:29
>>968
selectionを使えば任意の行をハイライトできる
けど、色は選択できなかったと思う。自信なし。
970仕様書無しさん:03/10/19 23:01
971仕様書無しさん:03/10/25 12:12
複数のビヘイビア間によるメッセージのやり取りってどうやるんですか?
例えばビヘイビア1の変数Aが1になったらビヘイビア2のある関数が実行されるみたいな
972500h:03/10/25 23:23
>>971
ネタ?ではなさそうな。。。
他のビヘイビアにあるハンドラ(関数)を実行させるのはめんどくさいので、
ムービースクリプトってのにハンドラ(関数)かけばどこからでも呼べます。
変数の共用は global でできます。extern は無いので、global だけ書けばよろしいです。
(変な説明だ)

あと、例えばpropety px,py で宣言してる変数を sprite(n).px として書く事もできたはず。

それに、オブジェクトでメッセージ通信ができますが、私は石頭PGなので
そこらへんの処理は使わないのです。

なんかピンがずれてるかも。

971さんは関数って呼んでるみたいだから、他の言語に精通してるみたいなので、
こんな説明で察してくださいませ。
973500h:03/10/25 23:30
補足

>あと、例えばpropety px,py で宣言してる変数を sprite(n).px として書く事もできたはず。
例えば propety px,py と宣言しているビヘイビアを割り当てたスプライト(チャネル n)に対して
他のスクリプトから sprite(n).px = 0 という風に書ける、ってことです。
974971:03/10/26 02:03
>>972-973
なるほど、ムービースクリプトってのがあったんですね。
今までビヘイビアスクリプトしか使っていなかったので全くその存在すら気付きませんでした。
さっき試して動作確認しました。
まだLingo始めたばかりで基礎すら出来てないのに
1つのビヘイビアスクリプトにずらずらコード書いてましたので、
これでやっと数千行のコードを数十〜数百行単位ですっきり見やすく分割出来るようになります。

500hさんどうもありがとうございました。
975仕様書無しさん:03/10/27 22:18
俺はよくsendAllSprites()を使って他のスプライトの関数を実行するが
やっぱりメッセージを使うのは重くなるのかな?
976仕様書無しさん:03/10/28 16:10
>>975
スプライトの数によると思うよ。

俺は戻り値を返せるからsendSpriteを使うことが多いなぁ。
977暇人:03/10/29 12:27
>>751
sendAllSprites()を使うのは処理が重いので
同じスプライトに設定されているビヘイビア同士で
メッセージのやりとりをしたければ

sendSprite( me.spriteNum, #message, value )

で良いんじゃないでしょうか?

>>973
>他のスクリプトから sprite(n).px = 0 という風に書ける、ってことです。
これは、ちょっと無理です。ドットシンタックスでアクセスする場合は
「me」でアクセスします。ここで言うとme.px = 0みたいな感じで…。
978暇人:03/10/29 12:45
ちょっと考えてみたんですけど、ビヘイビア間のやりとりは奥が深い問題です。
僕の場合の方法を少し説明します。

on getMe me, name
 if name = "scriptName" then
  return me
 end if
end

等とアタッチしたいビヘイビアに記述します。これで、scriptNameをキーにして

attachMe = sendAllSprites( #getMe, "scriptName" )

で、そのビヘイビアのmeを取得します。この後はme.test(value)等でサブルーチン
にもアクセスできますし、me.value等で変数を参照する事もできます。
ただ、この方法だと速度が遅いのでスプライト番号がわかっている場合は

attachMe = sendSprite( spriteNum, #getMe, "scriptName" )

↑の方が早いと思います。もっと早い方法として直接meを参照するという荒業も
あります。propertyで何かキーになる値を設定して

repeat with p in sprite(spriteNum).scriptInstanceList
if not(voidP(p.keyValue)) then me = p
end repeat

みたいな形でキーを検索します。多分、これが一番早いと思います。
979仕様書無しさん:03/10/30 16:54
次スレは?
980仕様書無しさん:03/11/01 12:09
>>978
すごい参考になりましたです。

キャストメンバーを参照する時はメンバー名で参照するより
メンバー番号で参照する方が早いんですよね。
981暇人:03/11/01 14:10
>>980
キャストメンバーの参照は名前より番号の方が高速だと思いますが、
あまりお勧めしません。(キャストの位置を変えると対応できなくなるので)
スプライト番号を直接指定する方法も本当は避けた方が良いのですが…。
利便性を追求すると速度が犠牲になってしまうのは避けられないので
僕の場合は、そのビヘイビアで他のビヘイビアにアタッチする場合は
最初にそのインスタンスを確保します。

property attachMe
on beginSprite me
 num = getSpriteNum( "spriteName" )
 attachMe = sendSprite( num, #getMe, "scriptName" )
end
 *getSpriteNumはスプライトに名前を付けてその名前からスプライト
  番号を取得するオリジナルサブルーチン、getMeは>>978参照。

こうすれば、最小限の速度低下で利便性を確保できるとおもいます。
アタッチした中のサブルーチンは「attachMe.hoge( 100 )」みたいな
形で呼べますし、変数は「attachMe.value = 200」みたいな形でアクセス
できると思います。
982仕様書無しさん:03/11/01 15:56
四捨五入関連で質問です
整数どうしの割り算時、「/」演算子のヘルプによると、
『二つの式が整数であるため、四捨五入されて整数値が返されることになります。』
とありますが、実際には四捨五入されずfloorされた整数が返っているようです。(win-ver.5)
みなさんの環境ではどうでしょう?
これはヘルプの間違いでしょうか?

983仕様書無しさん:03/11/01 23:22
>>982
過去ログ嫁!
…と言うのもアレなので>>866-872あたりを参照してね。
984仕様書無しさん
w3dに関する質問です
例えば、モデルの中身が
○○.w3d
┣obj1
┣obj2
・・・
┗obj100
の100個あった場合と

obj1.w3d
obj2.w3d
・・・
obj100.w3d
の100個別々に読みこんだ場合、前者はキャストメンバーが少なくて済むので
管理が楽で、後者のほうはキャストメンバーが膨大に増えて管理が大変になるけど
個々へのアクセススピードは速そうなんですが、どちらの方が良いのでしょうか?
どちらもファイルサイズやスピードがあまり変わらないのなら前者の方が良いのでしょうけど
経験者いたらおしえてください