【2D】ゲーム作成ツールGameMaker part3【マンセー】at GAMEDEV
【2D】ゲーム作成ツールGameMaker part3【マンセー】 - 暇つぶし2ch436:名前は開発中のものです。
08/11/17 20:03:59 qkRbLFEU
>>434
つまり一定速度でマウスに向かわせたいってこと??
もしそうならpoint_directionを使うといいと思う

437:名前は開発中のものです。
08/11/17 21:34:27 7QGWWpc1
説明が下手で申し訳ありません。

>>435,>>436
そうです、それが正しい動作なのです。
ですが私が目指しているのは「マウスの座標に移動する」のではなく「マウスの動きにあわせる」なのです。
例えばマウスを右に動かしたらオブジェクトも右に、マウスの移動量だけ動く。という事がしたいのです。

438:名前は開発中のものです。
08/11/17 22:07:33 PQNNdjbn
>>437
移動する前にマウス座標と移動したあとのマウス座標を比較するとかで対応とか無理ですか?

439:名前は開発中のものです。
08/11/17 22:08:05 PQNNdjbn
移動する前と後の座標を比較 ですね。誤字申し訳ない。

440:名前は開発中のものです。
08/11/17 22:38:22 7QGWWpc1
>>438,>>439
ありがとうございます。
何となくやり方は分かりましたがそれをコードで表すにはどうすべきか迷っております。
ちなみにGM6です。

441:名前は開発中のものです。
08/11/17 23:26:43 qkRbLFEU
うーん、まだやりたいことがよく分からないけど…
つまり初めはマウスと同じ位置にインスタンスがあって、で何かによってズラされると
マウスに平行して動くってこと??
もしそうなら例えば
ステップイベントでx、y、をマウス座標+global.pos_x,global.pos_yてして
変数の値をコントロールするとか…

442:名前は開発中のものです。
08/11/17 23:39:43 PQNNdjbn
>>440

>>441
のように、マウス座標取得してウンヌン。
>>420あたりの感じでできますか?

自分もいまいち理解しきれてませんが、
マウスを転がすところがした方向にインスタンスを移動させたいって事だと思います。
この場合、マウスポインタが画面外に出た場合や
さらに移動させようとしてマウスを元に戻した場合など変になりませんか?


純粋にマウスが移動したピクセス値だけを取得する関数ってありましたっけ?

443:名前は開発中のものです。
08/11/17 23:46:34 TD8Ccrf3
考え方としては>374の方が近いんじゃないかな
毎回mouse_x, mouse_yの値を覚えといて
x += mouse_x - (前回の値) とかすればよろし

444:名前は開発中のものです。
08/11/18 00:19:10 0wQt7vmy
基本的に、ピログラムってのは原始的なもの。

高度な、「以前の値から勝手に加減して現在位置を割り出す」なんてことはできない。


たいていが

まずマウスの位置をプログラマが取得
更にマウスの位置をプログラマで取得、
その差を自分ではじき出して移動量とする

そんな感じで書かないといけない

一個の関数でポンってできるようなものはあまりない。

445:440
08/11/18 06:04:44 MofBkydO
>>441-444
ありがとうございます。前回の値を覚えさせておく事で何とか私の思っている通りに出来ました。

マウス座標 - 前回のマウス座標 + 前回のオブジェクト座標 に移動させる事で出来ました。
本当にありがとうございました。

446:名前は開発中のものです。
08/11/19 15:26:02 DeAHgIn+
ジョイスティックって設定項目あったっけ?

見当たらんのだけど

447:名前は開発中のものです。
08/11/19 18:07:19 4za16kRK
以前ダンジョンゲームのターン制についての質問をした者です
ターン制に関してはぎこちないながらも何とか完成したのですが、
毎回周囲のマスが開いているか確認→空いているところにランダムに移動だと挙動不審というか妙な動きになってしまいます。
主人公が近くにいるときは追って動く、一本道では後戻りせずなるべくまっすぐ進む、といった動きをさせたいのですが
どのようにアクションを組めばいいのでしょうか。

448:名前は開発中のものです。
08/11/19 18:19:51 ratnEFy2
>>446
設定項目?
GMのヘルプの
The Game Maker Language (GML)
→User Interaction
→The Joystick
にあるやつじゃなくて?

キーコンフィグしたいってことなら、
グローバル変数でも作ってjoystick_check_buttonを使うといいと思う。

>>447
ターン制の動きができた、と。
んで、状況に応じて動きを制限してやりたい、と?
>主人公が近くにいるときは追って動く
>一本道では後戻りせずなるべくまっすぐ進む
やりたいことちゃんとわかってるじゃないか。

>主人公が近くにいるときは
>>追って動く

>一本道では
>>後戻りせずなるべくまっすぐ進む

こう分けて、もう少し考えてみ?

449:名前は開発中のものです。
08/11/19 18:31:18 ratnEFy2
一本道のとき、そのキャラの周囲に通れるマスはいくつある?
後戻りってのは、前回いたマスに行くことだよね?

450:名前は開発中のものです。
08/11/19 19:05:35 9SobK3CI
>>446
ジョイスティックイベントを探してるんだったら、Mouseの中にある。

451:名前は開発中のものです。
08/11/20 02:15:20 oldAvKXc
斜め入力できる???

例えば
top
right

の順だと斜め入力にならない

452:名前は開発中のものです。
08/11/20 02:43:38 JLC+2EzT
キー操作で斜め移動する時と同じ原理で、たとえばupで y -= 4、
rightで x += 4 とすれば結果的に斜めに動くことになるけど。

speedとdirection使ってるとか、斜めの時だけ移動量変えたいとかだったら
joystick系の関数を使って判定するコードを書く必要がある。

453:名前は開発中のものです。
08/11/20 14:33:23 xqi/6PvR
ある範囲(ゲーム中に移動する)以外を黒で塗りつぶしたいのですがどうすれば良いのでしょうか?

454:名前は開発中のものです。
08/11/20 15:13:08 gtPmWcjx
そこだけ抜いたスプライトをビューにくっつけたりすればいいんじゃないか?

455:名前は開発中のものです。
08/11/20 18:09:38 /1Y7KoVd
原始的に、黒い長方形を4つ描くってのもある。

456:名前は開発中のものです。
08/11/20 18:19:17 fSCzA9A7
むしろ画面サイズの黒い長方形の上にすべてを描画する。

457:名前は開発中のものです。
08/11/20 19:40:56 xqi/6PvR
>>454
移動できません

>>455
ありがとうございます。
それも考えたのですが記述が長くなりそうで・・・
「その範囲以外」という指定は出来ないのでしょうか?

458:名前は開発中のものです。
08/11/20 20:57:48 JLC+2EzT
>>457
「その範囲外」というのなら、黒く塗り潰したサーフェイスの
真ん中をくり抜いてかぶせるという方法があるけど、
どう見ても>454-455の方が簡単だわな。

「移動できません」って意味がわからないけど、
画面の2倍サイズのスプライトの真ん中に穴あけて
穴がちょうどいい位置にくるように動かせばいい。
そんな大きいスプライト、リソースがもったいないというならその通りだが。
「記述が長くなりそう」ってのも、たった4行だべ?
四隅の座標を計算して変数に入れとけば何てことない。

459:名前は開発中のものです。
08/11/20 21:35:24 xqi/6PvR
>>458
ありがとうございます。
確かに見たところ>>455のが最も楽そうですので四つ四角形を作ってみます。


続けて質問で申し訳ありません。
sleepを使うと全てが停止してしまうのですが一つのオブジェクトのみを停止させるにはどうすれば良いのでしょうか?

460:名前は開発中のものです。
08/11/21 06:23:48 8FHkjqBp
room
→backgroundsタブ
にある、Draw background colorのチェックボックスをオンにして、
その下の Color: のボックスをクリックして黒を選択する。

こうすれば、背景色が黒になる。

チェックボックスをオフにすると黒く見えるが、
それは黒ではなく何も塗られていないという状態なので、
上のやり方でいいから一度でも何か色で塗っておくべき。

一つのオブジェクトのみを停止となると、
with (object)
{

}
を使うといい。
移動を停止させたいとなると、
{}の間にspeed = 0;を入れればいいかな。

もしその後でまた動きを再開させたいのだったら、
deactiveやactiveを使うとか、その辺のアルゴリズムはまた考えなきゃいけない。

461:459
08/11/21 06:58:26 sjxyegPf
>>460
ありがとうございます。
その方法は便利ですね。ですが>>459で言う停止、というのはそのオブジェクト自体の働きの事です。
Createで1120ms停止してから移動開始、等です

462:名前は開発中のものです。
08/11/21 09:04:25 8FHkjqBp
だったら「停止」とは逆に、「動いていいときだけ動く」とすればいい。
例えばステップイベントで動かしているのなら、
if (ugoku == true)
{
   // ここにアクション
}
として、動かしたくないときはugokuをfalseにする。

わかっていると思うけど、msはミリセカンド。
秒でやりたいのならdatetime関数を使うのも手だけど、
そこまで拘らないのなら、フレーム数を数えるという方法もある。

例えば、
<Create>
ugoku = false;
taiki = 0;

<Step>
if (ugoku == true)
{
   //アクション
}
else
{
  taiki += 1;
  if (taiki >= 300)
  {ugoku = true;}
}

と書くと、インスタンスが作られてから300フレーム(5秒後(60fps時))にアクションをするようになる。
原理が分かれば応用もできるはず。

463:名前は開発中のものです。
08/11/21 14:36:04 sjxyegPf
>>462
ありがとうございます。
なるほど、それは応用性が高くて便利ですね。助かりました。

464:名前は開発中のものです。
08/11/21 20:07:21 Aa2c/Y3P
>>Createで1120ms停止してから移動開始、等です
普通にアラームを使えばいいんじゃ…?

465:名前は開発中のものです。
08/11/21 22:09:17 sjxyegPf
>>464
アラームってms単位なのでしょうか?
使ってみた所なんかちょっと違うような・・・

466:名前は開発中のものです。
08/11/21 22:25:03 Aa2c/Y3P
>>465
アラームは指定のステップ数が来たらイベントを行うのでms単位ではなく
ステップ単位です
何かmsにしなきゃいけない理由でもあったら別だけど基本的な時間をコントロールしたいなら
アラームが一番簡単で分かりやすい方法だから…

467:名前は開発中のものです。
08/11/22 05:30:20 ih+yuern
>>465
どうしても秒を使いたいのなら、
最初に一度current_timeを使って現在の時刻を取得しておいて、
毎回current_timeを使って、最初に取得しておいた時間から何ミリ秒経過したかを調べる方法がある。

秒単位に拘るのなら↑のやり方があるけど、どう考えてもアラームの方が楽。

468:465
08/11/22 14:23:55 Lvyzb+s5
>>466
ありがとうございます。
説明しにくいのですがどうしても秒単位じゃないとダメなのです。

>>467
ありがとうございます。
試しに使ってみます。

469:名前は開発中のものです。
08/11/22 19:42:07 q+lYsPmJ
秒からステップ数への換算なんて 秒×room_speed だけで済むし
(1120msなら 1.12*room_speed)
どちらにしても1ステップ未満の分解能は得られないけどね。
それとも、ゲームが処理落ちしてても実時間に
同期させて動かしたいってことなのかな?

470:名前は開発中のものです。
08/11/22 21:30:13 clFoYfTe
>>469
本人ではないけど恐らく後者じゃないかな
あえて実時間でフレーム非同期処理っていうとネットワーク関連かも
何れにせよ解決したっぽいので何よりだ

471:名前は開発中のものです。
08/11/22 21:53:58 lm1qIDqX
spriteの矢印の絵をマウスの座標に向けたいんですが、
(イメージとしては見下ろし視点での戦車の砲台)
やり方がわからないです。6.0のサンプルはあったのですが
低スペックなのでGameMaker6.0以降は起動できませんでした・・・。
なのでバージョンは5.3Aです。GMLはサンプルなどを参考にして使う程度で
多少は理解できるのですが書けません。
どなたかご教授お願いします。
お手数でなければ5.3AのサンプルをUPしていただきたいです。
よろしくお願いします

472:名前は開発中のものです。
08/11/22 22:10:27 lm1qIDqX
ログちゃんと読めてなかった…
自己解決しました 失礼しました

473:名前は開発中のものです。
08/11/24 13:04:13 xHi4CDCd
GMLでマウスポインタ自体を動かす事は出来ないのでしょうか?
よろしくお願いします。

474:名前は開発中のものです。
08/11/24 15:27:27 oGsKQE88
window_mouse_setとかdisplay_mouse_setとか

475:名前は開発中のものです。
08/11/24 21:01:38 xHi4CDCd
ありがとうございます

476:名前は開発中のものです。
08/11/26 22:59:16 8dk2lxXH
飛び道具を発射して壁以外の何かに当たった時アクションを起こすというふうにしたいのですが
コリジョンで特定のオブジェクトでなく「何かに当たった時」という設定はできますか?
今は敵一つ一つに「飛び道具に当たった時アクション」の設定をしているですがどうにも敵の種類が多いので…

477:名前は開発中のものです。
08/11/27 00:33:24 N2ZEFTBa
>>476
まさにそういう用途のためにあるのがParentと継承のシステム。

適当なオブジェクトを作ってobj_enemyとでも名付ける。
すべての敵オブジェクトでParentをobj_enemyに設定する。
(たしかAdvanced Modeを有効にしないとParentが出てこないので注意)
後はobj_enemyとのCollisionイベントを作れば終わり。

478:名前は開発中のものです。
08/11/27 06:17:21 98IVXa5Q
Parentは、オブジェクトをグループ化させることができる便利な継承システム。

例えばマ○オに出てくる亀。

緑の亀はひたすら歩く。崖で落ちる。
赤の亀は崖で引き返す。
羽の亀は飛び跳ねる。

全ての亀において、踏みつけると甲羅になる
という共通点を持つ。このように何か共通点がある場合、parentが非常に役に立つ。

noko_green
├ noko_red
└ noko_pata

↑のようにparent設定をして、(noko_redでparentをnoko_green、noko_pataでparentをnoko_greenに設定する)
noko_redで崖判別を、noko_pataで飛び跳ねるように設定すればいい。
共通点の「踏みつけると甲羅になる」というアクションを親オブジェクトのnoko_greenから引き継がせることができるため、何度も同じ記述をする必要がなくなる。

479:名前は開発中のものです。
08/11/27 06:18:17 98IVXa5Q
また、ゲーム内で使用しないダミーオブジェクトを作るというのも効果的。

noko_dummy(踏みつけると甲羅になる ゲーム内では使わない)
├ noko_green(移動:遅)
├ noko_red(移動:速 崖で引き返す)
└ noko_pata(跳ねる)

このとき、踏みつけると甲羅になるアクションは、noko_green、noko_red、noko_pataの全てに引き継がせることができる。
このように、共通な部分は全てダミーに置いておき、それぞれのオブジェクトで何が違うのかということだけを考えていけばいい。

480:名前は開発中のものです。
08/11/27 06:19:32 98IVXa5Q
親オブジェクトもまた親を持つことができる。
これを使って、

enemy
├ kuri
├ noko_dummy
│ ├ noko_green
│ ├ noko_red
│ └ noko_pata
└ bros_dummy
  ├ bros_hammer
  ├ bros_boomerang
  └ bros_fire

として、enemyとのCollisionイベントを作ることで、
いちいち緑亀にぶつかったとき、赤亀にぶつかったとき……等と何度も同じ事を繰り返す必要がなくなり、
「敵に接触したとき」とまとめることができる。

481:名前は開発中のものです。
08/11/27 06:26:01 98IVXa5Q
Parent関連で必ずと言っていい程同じような質問が来るようだからざっとまとめてみた。
次スレ以降のテンプレにでも入れておくと便利かと思って。修正改変等あればどうぞ。

482:名前は開発中のものです。
08/11/27 07:58:38 YVwu6GrP
なるほど、親はそういうときに使うのですか
ありがとうございました!

483:名前は開発中のものです。
08/11/27 08:16:46 98IVXa5Q
>>476
「敵が飛び道具に当たったとき」ではなく「飛び道具が壁以外の何かに当たったとき」らしいので
この場合は>>477で書かれている通り、飛び道具のコリジョン相手を「敵」に一纏めにするだけで済む。

以下は「敵が飛び道具に当たったとき」の考え方。よければ参考に。


飛び道具が数種類(ブーメラン、矢、ナイフ)あるとして、敵も数種類あるとする。
このとき、>>480の考え方を2回使う。

enemy
├ enemy1
├ enemy2
└ enemy3

として全ての敵を一纏めにして、さらに

weapon
├ boomerang
├ arrow
└ knife

として、全ての飛び道具を一纏めにする。
enemyもweaponも、中身は空っぽのオブジェクトで構わない。

そしてオブジェクトenemyで、オブジェクトweaponとのCollisionイベントを作ればいい。
こうすることで、「全ての敵において、何か飛び道具に当たったとき」とすることができる。


基本的に、似たものは一纏めにすると便利&効率的&構造上スマート。

484:名前は開発中のものです。
08/11/27 21:51:29 IFIhMc/y
ボスなどを作るときにパーツごとに分けてあるのですが、曲がる時とかパーツの動きを本体にあわせようと
例えば本体のステップで
with (obj_boss1_part)
{
direction = other.direction;
image_angle = direction;
}
などとするのですが、曲がるときにパーツの方がプルプルと震えるようになってしまいます。
多分角度がプラスマイナスしてるからだと思いますが何か解決策ありませんか?

485:484
08/11/27 22:01:43 IFIhMc/y
自己解決しました
本当失礼しました…

486:名前は開発中のものです。
08/11/28 11:52:47 PgkhIyzB
Parentの存在に目から鱗、今まで知らなかったわ

やってみて気付いたけど親と子で同じアクション入れると無視されるんだね

例えば、親:クリエイト時に変数aに1を代入、子:クリエイト時にbに2を代入とすると
aが存在しないってエラーになる。

487:名前は開発中のものです。
08/11/28 13:37:01 rNzKqzWh
>>486
親クラスのアクションを丸ごと使いまわす場合でも明示的なオーバーライドが必要だったはず
GMの場合はCallInheritedEventとかそんな名前のアクション(正式名称はヘルプで確認)
何も意識せずオブジェクト指向っぽくなるのがGMLの巧い所だけど
徹底してOOPL的な書き方しようとすると逆に分かりにくかったりしますね

488:名前は開発中のものです。
08/11/28 17:05:23 23J9ij0M
ジャンプするボタン(ここではZキーとします)を押している時間の長さでジャンプする高さを変えたいのですがどうすれば良いのでしょう?

Zキーを押している間、変数「jmp」に1ずつ足していき・・・といった感じでやってみたのですが
ジャンプする条件に地面の上にいる事が入っていて、ジャンプはZキーを押した瞬間に行われるので意味がありません。

489:名前は開発中のものです。
08/11/28 21:07:21 bzoft8au
>>488
押す(pressKeyDown)とパワーを貯めて(経過時間で数値を増加)
離す(pressKeyUp)とジャンプ処理

でどうですか?

490:名前は開発中のものです。
08/11/28 22:28:28 8vGbtbAk


スープーメイリオブロ(英語は発音大事)みたいにしたいなら、
単純に押してる間だけスプライトを移動させていけばいいだろ

491:名前は開発中のものです。
08/11/28 22:38:55 Ib5prIDh
>>486
親のイベントにあって子のイベントに無い物は、自動で子に引き継がれる。
子と同じイベントにある親のアクションを引き継がせる場合、
その起こしたいイベントの中でCall Parent Eventアクション(GML: event_inherited())を使う。

というわけで、>>486の例だと子のクリエイトのbに2を代入した前でも後でもいいから
親のイベントを呼んでやると、子もa=1を持つようになる。


>>488
ボタンを押した時にジャンプの高さを全て決めるのではなく、
ボタンを押してジャンプさせ、ボタンを離した時に、押してからの長さによって「ジャンプの上昇を止めて落下させる」という考え方がどっかで使われていたと思う。

492:名前は開発中のものです。
08/11/28 22:56:55 23J9ij0M
>>491
ありがとうございます。
その方法は考えてませんでした。物凄く助かります。

493:名前は開発中のものです。
08/11/28 23:26:08 x//721CN
範囲内ゼンブのオブジェクトに影響を及ぼすものはどうつくればいいのでしょう?
for(i=0;i<120;i+=1)
{col_body =collision_circle(self.x,self.y-120,i,all,true,true)}
with(col_body)

とすればうまいこと行くかなとおもったのですが一番最初に範囲に入ってきた物が効果を重ねて受けてしまうようでうまくいきません。

配列を使えばいいというのはなんとなくわかるんですがfor(i=0;i<instance_count;i+=1)
col_body[i] =collision_circle(self.x,self.y-120,120,all,true,true)
with(col_body[i])

とするとUnknown variable col_body or array index out of bounds
が出てきます……。根本的に書き方が違うのでしょうか?

494:名前は開発中のものです。
08/11/28 23:45:40 GUH2YmoS
考え方を逆にして、全部のオブジェクトに対して「自分が範囲内にいるか」調べさせてみよう。
with (all) { // すべてのインスタンスをループ
 if (collision_circle(other.x, other.y-120, 120, self, true, true) { // もし範囲内にいたら
  // 何かする
 }
}

with文の中ではselfとotherの役割が入れ替わることに注意。

495:名前は開発中のものです。
08/11/28 23:51:13 GUH2YmoS
ってnotmeをtrueにしちゃダメだな。ついでにselfよりidを使った方が安全かもしれない。
ということで2行目は
if (collision_circle(other.x, other.y-120, 120, id, true, false)) {
という感じで。
よく考えたら distance_to_point(other.x, other.y-120)<120 とかでも済むわけだけど。

496:名前は開発中のものです。
08/11/29 00:21:19 IHR7UfyX
>>495
うっほおおお!!!!!
ありがとうございます!!かれこれ一週間ぐらい悩んでたのでスッキリしました!
こんな簡単にいくものだとは……。悔しいですね……;ω;

497:名前は開発中のものです。
08/11/29 00:23:52 cPQXEOUA
>>493
GMのヘルプ
>The Game Maker Language (GML)
>GML Language Overview
>With constructions
の一番下にある例がまさにそれだな。

with (all)
{
if (distance_to_object(other) < 50) instance_destroy();
}

498:名前は開発中のものです。
08/11/29 01:08:40 IHR7UfyX
497さんもありがとうございます。いやあ新しい扉が開いたって感じです!

499:名前は開発中のものです。
08/11/30 11:51:36 oUNmDB7a
配列の例えばparts[i]というのがあるとして、
このiの値を取るにはどうしたらよいでしょうか?

500:名前は開発中のものです。
08/11/30 17:50:24 8ZPTNF4x
>>499
例)partsという配列のi番目の要素を得る方法

parts[4] = 16;
parts[5] = 25;
i = 4;

hoge = parts[5]; // この時点で変数hogeには25という値が代入される
hoge = parts[i]; // この時点で変数hogeには16という値が代入される

i = 5;
hoge = parts[i]; // この時点で変数hogeには25という値が代入される

「iの値を取る」の意味が分からん
上の例で言うと、どういうケースでどの値を取得したいんだろう
配列の基本的な使い方が分からないのか
それとも要素からインデックス値を取得する方法かな

501:名前は開発中のものです。
08/11/30 20:57:30 ICPzjhiz
i の値を取得するという意味なら

単に i を使えばいいだけ。 i に代入されれば、i が取得したい値そのものなんだから

何も難しいことない

502:名前は開発中のものです。
08/11/30 21:02:36 ICPzjhiz
i さんに、「あなたはどの値を持っていますか?」なんて聞くようなプログラムなど要るはずがない。
i さんは、関数の中に入れば自分の持ってる値を提出するしかないからだ。

例えば i さんが 5 の値を持っていて
printf(%d, i);
のような仕事(関数)に従事したとする

なら、printfによって 5 という値が勝手に取り出されるだけ

特に今何を持っているのかを教えてもらう必要はない。


503:名前は開発中のものです。
08/11/30 21:38:09 q/jrPCNZ
この場合、[i]というのは hoge という配列変数の何番目かという事を示している。

i=5だとするならば、hogeという配列の6番目という事をしめしている。
この書き方がされるまえには必ず、i には何らかの数値が代入されている。

よって、上記の氏たちのような返答でしか答えることができない。

というかjavaでもVBでもCでも何でいいので、プログラムのサイト調べておいで。

504:499
08/11/30 23:24:15 oUNmDB7a
えーと…説明不足でした。スイマセン
まずボスを作っていてまず本体となるobj_baseと両手足となるobj_partsがあります。
そしてもう一つobj_controllerがあります。
コントローラーでinst=instance_create(x,y,obj_base)とします、そしてinst.…=…と各変数を定義していきます。
そしてfor(i=0;i<4;i+=1)inst.parts[i]=obj_partsとしました。
パーツは両手足4つありそれぞれスプライトや描画位置が違うのでパーツのステップで
もしbase.parts[i]のiが0なら位置はどこどこ、1ならどこどこと決めるためにiの値を取りたいのです
長々と失礼しました。

505:名前は開発中のものです。
08/11/30 23:54:17 UwyYLNW7
やはり悩む必要ねえと思うが

506:名前は開発中のものです。
08/12/01 00:08:59 RRq5dBO9
for(i=0;i<4;i+=1)inst.parts[i]=obj_parts
の意味が分からん。どういうつもりでそれを書いているのか。
それだと、parts[0]~parts[3] まで、obj_parts が代入されるよ。
4つのオブジェクトを配列で管理しようとしているのかもしれないが、
結局右手をあらわす番号、左手をあらわす番号などは自分で決めるもの。
配列を使うのは、ループ使って処理しやすくするためなのだろう?
なら、こうなるはずだ。

for(i=0;i<4;i+=1) {
if (inst.parts[i] == 右手パーツ) {
//右手パーツの処理
} else if (inst.parts[i] == 左手パーツ) {
//左手パーツの処理
}
...
}

if ~ else if ~ の文は冗長でよろしくないが、switch文を使うとスマートに書ける。

507:名前は開発中のものです。
08/12/01 00:21:52 LiWv5v7d
> for(i=0;i<4;i+=1)inst.parts[i]=obj_partsとしました。
これだとすべてインスタンスじゃなくてオブジェクト(obj_parts)への参照になってしまって
区別がつかないと思うけど。inst作った時と同じやり方で
for(i=0;i<4;i+=1) inst.parts[i] = instance_create(x, y, obj_parts)
とかすればいいと思うがどうか。

で、obj_parts自身のイベントの中で、自分が何番目のパーツなのか知りたいってことだよね?
上のやり方で各インスタンスを作った後でiを教えてやればいい。
for(i=0;i<4;i+=1) {
 inst.parts[i] = instance_create(x, y, obj_parts);
 inst.parts[i].number = i;
}

番号に頼らずに、右手・左手・右足・左足それぞれ別オブジェクトにしてしまう手もあるけどね。
上で出てきたParentの考え方を使えばすっきりまとまるはず。

508:名前は開発中のものです。
08/12/01 00:25:03 QQgG8mIq
for(i=0;i<4;i+=1)inst.parts[i]=obj_parts

4まで数えるので、
inst_parts[0] = obj_parts
inst_parts[1] = obj_parts
inst_parts[2] = obj_parts
inst_parts[3] = obj_parts
inst_parts[4] = obj_parts

obj_partsが右手だったら、5要素全部に右手を代入していることになっている

509:名前は開発中のものです。
08/12/01 02:36:53 dWziD4by
でも結局パーツごとに処理変数(スプライトとか位置とか)が違うんだったら

辺に端折らずに、それぞれ別個の変数で管理するほうが楽なんじゃない?
基本オブジェクト(胴体)の位置からそれぞれの位置を割り出して
HPなどの共有する値は共有するようにglobalすれば良いだろうし。

510:名前は開発中のものです。
08/12/01 04:46:27 Ekx4hYib
もしかして、こうしたいんじゃなかろうか。

for(i=0;i<4;i+=1)
{
inst.parts[i] = instance_create(x, y, obj_parts);
inst.parts[i].number = i;
}

こうすることで、
「パーツのステップでもしbase.parts[i]のiが0なら位置はどこどこ、1ならどこどこと決める」
という動作ができる。
このとき、参照するのはiじゃなくnumberな。

511:名前は開発中のものです。
08/12/01 05:08:55 Ekx4hYib
obj_partsが作られたとき、inst.parts[i]にインスタンスIDが代入される。
パーツのステップで、obj_partsが作られたときに代入したinst.parts[i]のiの値を使って位置を決めたい。
(と解釈した)

……ってことは、それぞれのパーツから見て、iって変わらないよね?
つまり、右手はいつも右手ってこと。
だったら、作ったときにそのiの値をそのパーツに持たせればいい。

というわけで、パーツが作られたとき、そのときのiの値をnumberという名前の変数としてパーツに持たせてみたのが>>510
これで、パーツのステップでnumberを使って位置を決めることで、「iを使って位置を決める」というのと同じ動作ができる。



……ところで、base.parts[i]て何。inst.parts[i]ならまだ分かるが。

512:名前は開発中のものです。
08/12/01 11:26:32 Ekx4hYib
ってあるぇ? 今よく見てみたら>>507にあるじゃん。
しかも、よく読んでなかったのにnumberって変数の名前まで一致(意図してません)。
もう少し読もうな、俺。('A`)

513:499
08/12/01 13:30:41 WFVB4NOy
なるほど…
ではやっぱり配列の[]内の値をとるシンプルな関数などはないんですね…
やっぱり509氏の言うようにそれぞれ個別の変数を持たせた方がよさそうですね
皆さんいろいろな意見ありがとうございました

514:名前は開発中のものです。
08/12/01 21:04:50 LiWv5v7d
>>513
やりたいことはわかったけど、「配列の[]内の値をとる」なんて自分用語は
やっぱり誰にも通じないぞ。「配列の要素から添字を調べる」とか
もっと簡単に「検索する」とか言うんだ。

配列の検索自体は難しいことじゃない(ループして調べるだけ)。
そういうスクリプトは簡単に書けるし、ds_listなら関数一発でできる。
ただ、君のやりたいこと実現するのに検索なんて必要ない、
もっと簡単に済む方法がいくらでもあるってだけのこと。

515:名前は開発中のものです。
08/12/01 21:39:31 hPo6+q3F
指定したサウンドでなく「今鳴っているサウンド」を停止する方法はありますか?

516:503
08/12/01 22:44:50 dWziD4by
>>513
だーかーらー

i を使ってるのはfor文の中でしょ?
でfor文は繰り返す処理する処理で{}の中身を通して処理し、
最後に i++ で i に「+1」するんだ。

for(i=0;i<4;i+=1){中身} は、i の値が4になるまで繰り返す文 なんだ。
ここまではOK?

なので、 i の値はその処理内の実行回数の値である。
i は、そのときの値である。

i にどの数値が代入されてるか調べるには、単に i を見ればいい。

ということだから、プログラムの基本中の基本であり、どっかの解説サイトを見てこいと言ったんだ!!

517:名前は開発中のものです。
08/12/01 23:04:58 VAhzR6SY
>>516
おちつけwfor文がどうとかではなくて
定数定義とか列挙子みたいなことをやりたいんでしょ。たぶん
GMLで使えないけど


518:名前は開発中のものです。
08/12/02 02:15:33 cOR4nM2X
i の値を取得するのは非常に簡単だから
Hello world レベルだから
実際、Hello world で使ってる関数の中身を数文字変えるだけ。


だから、そんなことで悩む事自体がおかしいのだ。
おかしいので、「そんなこと悩むわけがない、別のことを言いたいのではないか」
と思うし、実際文そのままの意味で取れば「そんなもん、幼稚園児でも出来るぞ」になるわけだ

言い回しがおかしいと答えも出ない

519:名前は開発中のものです。
08/12/02 02:21:18 cOR4nM2X

なんつうのかな
箱にオモチャを入れました

箱の中身を知る方法ないですか

と聞かれたようなものだ。


開けて見りゃいいじゃねえかよ

箱(変数) を関数に渡す、関数で使うようにプログラムすれば
関数は勝手に箱開けて中身を使う。

それで知ることができる


非常に単純なことだから、悩むなんて誰も思わない。
Cだったら、printfなどの、数字や文字を画面に表示する関数で使って、「見る」だけでいいからだ。

520:名前は開発中のものです。
08/12/02 10:40:55 xezqMnLO
流されかかってる>>515を拾ってみる。
とりあえず思いついた方法2つ。どちらもGMを使う。

1)全音停止
sound_stop_all()
↑を使えば全部止めることが出来る。
全部止めれば、「今鳴っているサウンド」を停止することができる。

2)確認→停止
sound_isplaying(index)
↑を使って、再生されているかどうかの確認が出来る。
これを使って戻り値がtrueならsound_stop(index)で止める、という方法。
チェックしたいサウンド分だけループさせることで、「今鳴っているサウンド」をピンポイントで停止させる。

521:520
08/12/02 11:00:03 xezqMnLO
>>520
誤)GM
正)GML
orz

522:名前は開発中のものです。
08/12/02 14:41:52 xRaNmqQG
GMのヤバいところは、ほっておくとサウンドデバイスが増え続けること

ffdshowなどの、1デバイス1デコーダーのデコーダーで見るとわかるが、

音楽鳴るたびにデコーダが増える。
20曲鳴らせば20個のデコーダが用意され、デバイスを閉じても消えないことすらある。



523:名前は開発中のものです。
08/12/02 17:06:18 We5UmkXJ
ゼルダみたいなゲーム作りたいんだけど
お金表示やお金を作ることってできるんですか?(ゼルダで言うルピーみたいな

524:名前は開発中のものです。
08/12/02 17:25:34 Ujq+dWEg
すごく初歩だと思うが質問させてください。

グラディウスみたいなのを想像してもらえればわかりやすいと思うけど、
自機の移動がうまくいかない。
上下左右それぞれ押したときにその方向に一定の速度を与え、
離したときにその方向の速度を0にしているんだが、
たまに引っかかったように動かなくなることがある。
急に逆方向のボタン(上と下、右と左)を押すとなることが多い。
ちなみに座標を移動させる場合も同じように引っかかる。

どうやったらもっとスムーズに動くんだろう?

525:名前は開発中のものです。
08/12/02 20:58:31 taOqiXBl
>>523
変数使えば簡単にできるけど
初心者だったらscoreを流用するのがお手軽でおすすめ。

>>524
GMについてくるサンプルか公式のチュートリアルに
1945っていうシューティングがあるから、見て真似してみれば?

キーを下げた時(key press)と上げた時(key release)で制御してると
複数のキーの上げと下げが干渉してそんな不具合が起きやすい。
単に押している間(keyboard)だけ座標を増減させるようにすればすっきりする。

526:名前は開発中のものです。
08/12/02 20:59:02 UFWpQr+3
>>523
できます。

お金とか敵とかリンクとかはすべて「オブジェクト」という個体表示で考えます。

敵に当たるとダメージの部分を、
お金に触れると(お金が画面から消え)お金単位が増える。

と置き換えます。
どの言語を使っても考え方は同じになります。

527:名前は開発中のものです。
08/12/02 21:45:08 We5UmkXJ
>>525>>526
ありがとうございます。スコア使ってみますね

528:名前は開発中のものです。
08/12/02 22:23:17 uu7fmr/m
なんか条件式がおかしいと思ったら
xprevious と ypreviousは >>377
>・(now all instances are set to their new positions)
これ以降じゃないと値が保障されないのか。ぬかったわ

529:名前は開発中のものです。
08/12/02 22:42:03 ATORRfCZ
シミュレーションゲームの練習をしているのですが
範囲の求め方が分かりません。
自分のやり方だと先ず、プレイヤーを選択すると
移動範囲が出るようにはしたのですが、
この出し方がinstance_create(x,y,object)
で出しているのですがこの方法だと
どうすれば障害物の処理が出来るのかが分かりません;
もう一回一から作ったほうがいいのでしょうか・・・
説明が下手で申し訳ありません;

530:名前は開発中のものです。
08/12/02 23:10:09 uu7fmr/m
自分もシュミレーション作ってるよ
ゲームにもよるけど障害物の処理ってのは避けて通るとかそういうことかな
具体的な状況がよく分からないかも

どこまで移動できるかだけでいいなら
プレイヤーに移動力のような値を持たせて
平地なら-1 砂地なら-2とかやって移動力がゼロ以上なら指定した場所までいけるとかできるけど


531:名前は開発中のものです。
08/12/02 23:15:43 ATORRfCZ
>>530
仰るとおりです。
障害物をよけて通れるようにしたいのです。

ネットとかで調べるとそのようなやり方を良く見かけるのですが、
如何せんどう組み込めばいいのか分からず;
もう少しヒントを頂けると嬉しいです。
厚かましくてすみません;

532:名前は開発中のものです。
08/12/02 23:21:00 uu7fmr/m
どういうゲームなのか教えて欲しいかも
たとえばFEやタクティクスのようにターン制なのか
ポピュラスのようにリアルタイムな感じなのか
マップの構造によっても変わってくるし


ていうかシュミレーション・・・これは恥ずかしい誤字だった///

533:名前は開発中のものです。
08/12/02 23:24:40 ATORRfCZ
FE目指してます。
もう少し粘ってみます。

534:名前は開発中のものです。
08/12/03 00:07:38 5ByG7lYo
例えば、開始時の移動力が10あるとして
     5
     1 6
    4☆2 7 (星の位置がキャラクターだとして)
     3
☆を起点として1、2、3、4を調べ、座標とかかるコストを配列に保存する。
1に起点を移し周囲4マスを調べ、座標とそれまでにかかったコストを保存する。
すでに調べた座標は基本的に記録しないが
1→6 と 2→6のような経路が被る場合、移動コストが軽いほうを保存する。

移動コストが10より小さいものがなくなるまでこの作業を繰り返して
終わったら配列に保存された座標のところを移動範囲として表示すればいいような気がする
FEだったらこんな感じかな

535:名前は開発中のものです。
08/12/03 02:03:59 r0U2/w9u


通れないマップチップは、「通れまへんフラグ」を設定しておく
自分と敵との最短経路を弾き出し、その間に「通れまへん」があれば分岐



536:524
08/12/03 17:54:24 XBsb6U76
>>525
ありがとう、助かりました。

537:名前は開発中のものです。
08/12/04 19:42:54 COm9ODRQ
FEならSRC使うべきだろ常識的に考えて…

538:名前は開発中のものです。
08/12/04 19:51:06 wis04ySw
質問多くてすみません・・・
ゼルダでアイテム画面とかに移動する。というのはRPGのフィールドの位置保存
を使えばできると思ったんだけど、装備した元の位置の主人公のオブジェクト変更
ってできるんですか?


539:名前は開発中のものです。
08/12/04 20:23:54 BFQV7gOy
>>538
「元の位置の」ってのが何指してるのかどうしたいのかわからないけど

主人公の表示アイテムを変える方法としては、

1)アイテムに固有IDを割り振っておく
2)装備してるアイテムIDの画像を表示する

で、いけるんじゃないかな。
もともと表示するのはIDのアイテムで、アイテムが変わったら画像もチェンジする

アイテムごとに画像を用意しなくちゃいけないのは、そもそも当然のことだしね。

540:名前は開発中のものです。
08/12/04 20:32:17 hYQrGj00
はじめまして。
GM初級者です。
早速質問ですが、
複数のインスタンスから
一番別のオブジェクトに近いインスタンスを取得したいのですが、
どうすればいいでしょうか。


541:名前は開発中のものです。
08/12/04 21:33:34 BvmV+/Fo
>>540
質問がややこしくて読み間違えてるかもしれんが
恐らくinstance_nearest(x,y,obj)を探してるんだと思う

例えば、objMikata、objTeki、の2種類のオブジェクトがあるとして
objMikataのインスタンスが9個ある(insMikata1~insMikata9)
同じくobjTekiのインスタンスが9個ある(insTeki1~insTeki9)
この時、3番目の味方から最も近い敵は

nearestTeki = instance_nearest(insMikata3.x, insMikata3.y, objTeki);
こんな感じで求められる
詳しい説明や似たような関数はヘルプ参照

542:540
08/12/04 22:08:30 hYQrGj00
>>541
それです!
ありがとうございました。

543:名前は開発中のものです。
08/12/05 17:53:46 X+fPv7FO
>>539
助かりました。
ありがとうございます!

544:名前は開発中のものです。
08/12/06 17:02:27 DxqncoX6
また問題が出ました。
何度も何度もすみません。
敵が全滅したり
味方が全滅したりすると
変数の参照先がなくなり
エラーになります。
解決策はないでしょうか?


545:名前は開発中のものです。
08/12/06 17:49:42 6jDgYk9y
参照するまえに、存在するか確認する。
存在するなら参照する。しなかったら何もしなくていい。
instance_exists(obj)を使えば存在するかどうかが、
instance_number(obj)を使えば個数がわかる。


546:544
08/12/06 18:50:41 DxqncoX6
ありがとうございます。

547:名前は開発中のものです。
08/12/06 19:09:11 uswEIGEy
ターン制を自分なりに頑張ってみたのですが、
完成したと思ったらやっぱり色々とおかしかったのでアドバイスをいただきたい次第です


まず敵を用意して、生成時にglobal.bに+1する。

global.aを用意して、1の時主人公が行動できる→何か行動したらa=2にする
a=2になったとき敵達のターンになり、何か行動したら一体につきglobal.bを-1する。
global.b=0になったときa=1にして、現在ルームにいる敵の数をbに代入する


これで作ってみたのですが時々何故かbが0より少なくなったり敵が挙動不審な動きになってしまいます。


その辺りはまだ許容範囲だとしてもう一つ、
・主人公が敵に囲まれているときに相手達のターンになり、敵が攻撃してくる
の際一斉に殴りかかってくるような有様になってしまいます。

そこで現在いるモンスターに何か順番に番号を与えて、たとえば敵Aに1、Bに2、Cに3、Dに4…という具合に。
「global.Nを用意して、主人公が行動、つまりa=2になったらNを1にする
N=1のときAが行動し、bから-1してN=2にする→N=2になったのでBが行動し、bから-1してN=3にする→
N=3のときCが…~→b=0になったらa=0、N=0にする」

こうすればおそらく順番に行動してくれると思うのですが
(b-=1のタイミングは攻撃や移動などのアニメーション終了時なのでちゃんと順に動くはず)
「現在いる敵に何か順番に『番号』を与える」「Nの値と等しい『番号』を持つ敵が行動し始める」
という処理をどう行えばいいのか分かりません。
敵の数は死んだり新しく出現したりでa=2になるごとに変動してしまうので初めから固定で番号を与えることはできません。


長文かつ分かりにくい文章だと思いますがどうすればよいか分かる方ご教授願います…

548:名前は開発中のものです。
08/12/06 21:06:12 eG4vVrw2
一般には待ち行列とかキューとか言われる構造を使うと思う。
1. 主人公とすべての敵のインスタンスIDをキューに入れる
2. キューからインスタンスを一つ取り出し、そのインスタンスに行動させる
3. 行動が終わったら2に戻る。キューが空になっていたら1に戻って最初から

具体的にどう実装するかだけど、まずコントローラオブジェクトを一つ用意して
次のように処理させる。
(ds_queue使ってもいいけど、レジストしてないかもしれないので配列で実装してみた)
・Createイベントで以下の変数を用意
global.current_id = noone; // 現在行動しているインスタンスのID(nooneなら誰もいない)
queue_size = 0; // キューの中身の要素数
queue_pos = 0; // キューの何番目まで処理したか
・Stepイベントで次のように処理
if (!instance_exists(global.current_id)) { // 行動しているインスタンスがいない場合
 if (queue_pos >= queue_size) { // キューが空だったら……
  queue[0] = obj_player.id; // 先頭に主人公のIDを入れ……
  queue_size = 1;
  with (obj_enemy) { // 他のすべての敵もキューに入れる
   other.queue[other.queue_size] = id;
   other.queue_size += 1;
  }
  queue_pos = 0;
 }
 // キューから一つ取り出して行動を開始させる
 global.current_id = queue[queue_pos];
 queue_pos += 1;
}

主人公と敵のインスタンスは
・global.current_id == id だったら自分が行動する
・行動が終わったらglobal.current_idをnooneに戻す
とすればいい。

549:名前は開発中のものです。
08/12/06 21:34:34 uswEIGEy
ありがとうございます
ちょっと難しそうですが頑張ってみます。

550:名前は開発中のものです。
08/12/06 21:44:15 Gr9J9Ja2
やはり548氏が説明されてるキューが一般的だと思う
あえて別の方法を挙げると
ターン情報をグローバル変数ではなく各ユニットに持たせるようなやり方

ユニットは配列に格納しておきそれぞれにターン値を設定する
unitList[0].turn = 15; // ターン値の初期値
unitList[0].speed = 7; // 素早さ
毎ターンごとに全ユニットのturnプロパティに素早さパラメータを加算
unitList[0].turn = 15 + unitList[0].speed;
turnの値が100以上になったユニットがいれば彼のアクティブターン
いなければ素早さ加算を繰り返す

魔法や呪文で素早さやターン順が変わるゲームではこの方法も分かりやすいかもしれない

551:名前は開発中のものです。
08/12/06 22:33:58 uswEIGEy
>>548
stepの部分を入れてみたところ色々なところが構文エラーになってしまったのがどうしてでしょうか…
obj.enemyなどの部分はちゃんとオブジェクト名に直しました(そこは関係なかったみたいですが)。

552:名前は開発中のものです。
08/12/07 01:43:46 Hva4nw+k
すみません、{などの位置を正したら直ったみたいです。

>>548の場合私が設定したglobal.aやbなどは無くても大丈夫なのでしょうか?

553:名前は開発中のものです。
08/12/07 15:34:40 BlF8unb/
また問題が...
自分のオブジェクトと敵のオブジェクトの間に
壁オブジェクトがあったら弾を打たず、
無かったら撃つという風にしたいのですが・・・
回答はしたいときで構いません。
よろしくお願いします。

554:名前は開発中のものです。
08/12/07 16:47:56 iNdKCD5t
>>553
ヘルプでcollision_line関数を調べてみましょう・・・

555:553
08/12/07 18:01:29 BlF8unb/
またまたありがとうございます

556:名前は開発中のものです。
08/12/10 20:08:22 Pwqi4CyR
URLリンク(www2.uploda.org)
今こんなゲームを作っています
クリックしたとこに緑のやつが移動
近くに赤いやつがいたら勝手に撃つ
左上はレーダー

ですが、
なぜか赤いやつの処理だけが遅いのです。
緑のほうが、数も処理数も多いはずです。
赤が一匹だけでもかくかくになってしまいます。
見ていただけたらうれしいです。

557:名前は開発中のものです。
08/12/10 20:09:11 Pwqi4CyR
連レスorz
パスは fedora8 です

558:名前は開発中のものです。
08/12/10 20:27:44 edz1Bxdl
緑の奴にinstance_exists(object3)があるから
もし赤い奴がなければこれ以降が無視されるので軽い
衝突判定だとか索敵を毎ステップやると当然重くなるよ

あと他の人に見てもらうならコメントか何かはつけるべし


559:名前は開発中のものです。
08/12/10 20:56:57 nqQ/Z5/R
ルームのスピードはそのまま(30fps)で特定のキャラクターのスプライトを10fpsでアニメーションさせる、というようなことは可能でしょうか?

560:名前は開発中のものです。
08/12/10 22:32:55 eRvJFMy9
>>559
image_speed アニメーションの速度
image_index アニメーションの何コマ目を表示しようとしてるか
image_number アニメーションの長さ(総コマ数)

ヘルプの同じページに3つとも例文付きで載ってます
徐々にアニメーションを早くしたり、特定のコマで停止したり
状況に応じて動的にアニメーション速度を変更できます

561:名前は開発中のものです。
08/12/11 08:01:09 0wlARFf+
ステップの処理速度を早くしたいのですが
ルームのfpsを高くするだけで効果はあるのでしょうか?

562:名前は開発中のものです。
08/12/11 08:47:48 BGyF9xSS
>>561
ステップの処理速度を早くしたい、というのは、
動作が重いのを何とかしたい、ということだろうか。

基本的に、効率が悪いと重くなる。
処理速度を上げたいのなら、効率を上げるのが一番いい方法。

例えばマ○オで、そのステージ全体の処理を全て実行するのは無駄が多すぎるのがわかるだろうか。
見えない部分、画面からあまりにも離れた場所の処理を省くことで、効率も処理速度も大きく変わる。

同じ要領で、毎ステップ実行しなきゃいけないことなのかどうかを考えながら、
無駄な部分を出来る限り省いてみるといいと思う。


563:561
08/12/11 09:52:59 uFLRyYUD
説明不足でした。すみません
キャラAが行動し終わったらすぐキャラBが行動し、Bが行動し終わったらキャラCがすぐ行動し…
という動作をあくまでも順番通りに、かつほぼ瞬時に行いたいのですがどうも若干遅延したり最初に動くキャラと最後に動くキャラで行動終了に差が出来たりしてしまうのです。
これはfpsを高くすることで若干でも解消できるのでしょうか。

564:名前は開発中のものです。
08/12/11 14:11:51 BGyF9xSS
何だかどうしてもfpsを上げたいようだね。
それに、解消できるかどうかは、試してみればわかるようなことだと思うが……。
理論的には目立たなくなるだろうけど、でも「目立たなくすること」が最終目的じゃないはず。
「あくまでも順番通りに、かつほぼ瞬時に行いたい」
本来なら、これをどうやったら実行できるかと考えるべき。
うまくいかないのなら、何故ズレが生じるのかと原因を考えるべき。

ABCとキャラが三人いるとしても、ABCの順に処理されるとは限らない。
もしかしたらGMは、BCAの順に処理してるかもしれない。
もしそうだったら、
  1フレーム目
  B:「Aが未処理」
  C:「Bが未処理」
  A:処理
  2フレーム目
  B:処理(Aが処理済)
  C:処理(Bが処理済)
という感じに、1フレーム目にAが処理され、2フレーム目にBCが処理されることになる。
これが多分遅延される原理だと思う。

他のオブジェクトに順番を覚えさせ、
そのオブジェクトがABC全員を操作するのがいいんじゃないかと。
例えば、Zってのを作って、ABC自身は何もせず、ZがAを処理してBを処理して……と。
順番を扱うときには配列等を使うのもあり。

565:名前は開発中のものです。
08/12/11 16:37:49 nF6qn38V
結論から言えばfpsを変えても解消できないだな
1フレーム毎にオブジェクトが全部更新されるから、何の差か知らないけれど
ある経過時間での差は変わらないよ

キャラA、B、Cが別々に動いてそれぞれの行動開始までの時間がばらつくというのなら
最初のフレームで行動決定処理(AI部分)をやって次のフレームで行動開始ってすれば
揃っているように見えるけど・・・ゲームによりけりかもね

566:名前は開発中のものです。
08/12/11 18:43:18 0wlARFf+
なるほど、ありがとうございます
一応>>548を参考にして形だけは出来たのですが先述の通り遅延が生じたり
敵の数が多くなると処理が遅くなって(主人公の動ける順番が回ってくるのが遅くなって)
一歩動くと次動くまでに若干待たされ動作が快適とは言えないような状態になってしまうのです

解消する方法は無いでしょうか…

567:名前は開発中のものです。
08/12/11 19:45:07 nF6qn38V
ゲームの設計かキューの使い方、どちらかが間違っているような気がする

スペックにもよるけどインスタンス5~600体ぐらいなら
上記のキュー設計で処理落ちすることはあんまりないと思うんだけどなあ
主人公サイドはキューに詰め込まなくてもいいとか細かいことはあるけど

568:名前は開発中のものです。
08/12/11 20:57:24 0wlARFf+
処理落ちというか主人公が動いたときに一斉に行動するのではなく敵がちょっと遅れて動くんです。
敵の数が多ければ多いほど番号が最後に割り振られてる敵?の動きがかなり遅れています。

569:名前は開発中のものです。
08/12/11 20:59:36 5W34XGsl
>>568
1)情報を小出しにしない。
2)仕様はなるべく提示
3)表現したい目的を言う

570:名前は開発中のものです。
08/12/11 21:22:53 YYSIE6Pp
もともと>547で敵が全部一斉に動くのがイヤだというから>548のキュー案が出てきたわけで
「順番に動く」と「一斉に動く」は両立しないんだけど、結局どうしたいの?

>566で言ってる主人公が待たされるのを解消したいと言うのなら
行動完了するまで待たないで、行動開始してから数ステップ経過したら
次のキャラに行動を始めさせるという手がある。
キャラ数に応じて間隔を変えるようにすれば>568の問題もばっちり。
もちろん、複数のキャラがある程度並行して動けるように設計しとかないといけない。

571:名前は開発中のものです。
08/12/11 22:19:17 0wlARFf+
「一斉に動く」というのは視覚的な物で>>570さんのおっしゃる「ある程度並行して動く」というのが正しい表現ですね。すみません。

今は>>548さんの案でシステムを組んで、
主人公:「global.current_id = idで行動できる状態になる」「移動、攻撃など何かを行ったらglobal.current_id = noone」
敵:「global.current_id = idで行動できる状態になる」「移動、攻撃など何かを行ったらglobal.current_id = noone」(同じ)
でそれぞれ動くようにしています。

敵が1体の時でも主人公が動く→敵が動くの過程で「視覚的に」同時には動かず、
・主人公が動く→動き終わる(行きたいマスに行く)と敵がすぐ動く
の流れになりどうも不自然になってしまいます。
敵の数が多くなればなるほどそれが連鎖して
・主人公動く→動き終わると敵Aが動く→Aが動き終わるとBが動く…
となり少しずつ遅延されていってしまいます。

以前の
global.a=1で主人公のターン
global.a=2で敵のターン
主人公行動でa=2に
敵のクリエイト時にglobal.b+=1
global.bの最大値をglobal.cに記録
敵が行動するとglobal.b-=1
global.b=0になった時にa=1に戻し、cをbに代入
だと視覚的でなく実際に「主人公と敵全員が一斉に動いた」のですが
これでは順番に動くというのが全く無視されるため廃止しました。

自分の希望としては
・(視覚的にでもいいので)全員が同時に動く。
・順番に攻撃したりするために(内部処理の面だけでもいいので)順番に行動しているようにする。
の二つが同時に満たされるといいのですがいい方法は無いでしょうか。
何度も申し訳ありません


572:名前は開発中のものです。
08/12/11 22:41:52 YYSIE6Pp
普通のターン制ゲームでも、敵がたくさんいたら全員が攻撃し終わるまで待たされるだろ?
と書こうとしたけど、でも全員が歩き終わるのを待ったりはしないよな?と思ったのでちょっと考えてみた。

シレンなり何なり君が参考にしてるゲームで自分と敵の動きをじっくり観察すればわかるはずだけど、
その手のゲームでは1ターンが実際には複数のフェーズから成り立っている。
(1) 自分が行動する(歩く、攻撃する、道具を使うなど)
(2) 敵が歩く(全員同時に)
(3) 敵が攻撃する(一体ずつ順番に)
自分が歩いた時には(1)と(2)が同時に起こるけど、それ以外の行動をとると(1)が終わってから(2)が起こる。
誰も攻撃行動をとらなければ、主人公は立ち止まることなくスムーズに歩き続けられるわけだ。

この辺を踏まえて、歩くのとその他の行動を分けて別々に実行させるようにしたらどうかな。
ただ、敵はあくまで1ターンに「歩く」と「攻撃する」のどちらか片方しかしないと思うので、
どちらの行動をとるかは(2)より前(ひいては主人公が歩き始める時)に決めておく必要がある。
まとめるとこんな感じかな。
・主人公が行動決定したら、その他のキャラ全員がどう行動するか決定。変数にでも覚えておく
・主人公の攻撃行動、終わるまで待つ(攻撃しない場合はすぐ次に進む)
・歩く予定のキャラ全員を同時に歩かせる。全員の行動が終わるまで待つ
・攻撃予定のキャラに、キューを使って順番に攻撃行動を行わせる
・全員行動し終わったら最初に戻る

573:名前は開発中のものです。
08/12/12 00:41:26 YwPJgrfp
攻撃はなるべく隣接したときや一直線上にきたときに行いたいので
行動前に決定するのはちょっと自分の技能じゃ辛いかなぁと…

主人公が行動する→敵:主人公の行動と同時に、攻撃範囲内に主人公がいなければ移動や特殊行動、いる場合は一旦待機
→移動するべき敵が全員移動し終わったら攻撃準備している敵のフェイズに入る→キューを使って順番に攻撃処理→主人公が動ける状態に戻す

として

変数aを用意→a=1の時主人公行動可能状態→主人公行動時にa=2→a=2になったら敵の行動開始(a=2になった際敵の数をbに記録)→
・攻撃範囲内に主人公がいない敵:移動や特殊行動をし、b-=1
・攻撃範囲内に主人公がいる敵:キューを利用して順番に攻撃。何らかの変数等をON状態にしてその敵だけキューに対応させる?>攻撃したらb-=1
b=0になったらa=1に戻して再び主人公行動可能状態に

とこんな感じでいいのでしょうか?
攻撃をする敵に関するキューをどう組めばいいやらよく分からないのですが…

574:名前は開発中のものです。
08/12/12 01:37:09 AbV0Ta9O
攻撃範囲にいたらキューに追加
フェーズが変わったら一個取り出してと処理していけば問題ないんじゃないか

根本的に a が 0,1,2,4 とかビットフラグで管理したいのかもしれないけど
慣れていないならきちんと名前をつけて真偽値でやるべき
フェーズ管理についても同様。変数の状態で管理するのではなく
主人公行動、敵の行動、敵の攻撃 etc とそれぞれフラグ管理するべき

bの意味が果てしなくないように見える

575:名前は開発中のものです。
08/12/12 14:22:36 UTYwgiXi
オブジェクトの親やマスクを途中で変えたいのですがどうやればいいのでしょうか?

576:名前は開発中のものです。
08/12/12 19:19:55 b5nKeRJC
親を変えるのは不可能だけど
マスクはmask_indexに再代入すればできるはず

577:名前は開発中のものです。
08/12/12 21:00:29 6TlHc+FT
すみません
gmkはgmdに変換できないでしょうか

578:名前は開発中のものです。
08/12/12 22:10:49 Vplk2GsR
>>575
object_set_parentで親を変えることはできるが、インスタンスではなく
オブジェクト自体(設計図)に作用するから期待するような結果にはならない。
親を変えたいって質問はたまに見るけど、そういう時はたいてい設計が間違ってるべ。

>>577
LGMでGM7→6に変換できるらしいけど、使ったことないから本当かどうかはわからん。
URLリンク(www.ismavatar.com)
って、gmdってことはさらに6→5に落とさないといけないのか。
互換性ない機能も多いからほとんど無理じゃないかな?

579:名前は開発中のものです。
08/12/12 22:16:46 agcPaJTz
GMで5ボタンマウス等のサイドボタン使う事はできませんか?

580:名前は開発中のものです。
08/12/12 22:59:50 AbV0Ta9O
Help見る限り無理っぽそうだけど

もしデバッグでサイドボタン押したときのmouse_buttonの値が0~3以外だったら
その値を割り当てればいいし、キーコンフィグっぽくするなら
global.mb_side_one |= mouse_bottun
とかすればできそうではあるけど対応していないような気もする

581:名前は開発中のものです。
08/12/12 23:36:54 agcPaJTz
>>580
レスありがとう
デバッグでGM5.3とLGMで確認したところ無反応でした

582:577
08/12/13 00:38:49 K75p9U8G
>>578
ありがとうございます
LGMですね
やってみます

583:582
08/12/13 14:58:29 K75p9U8G
LGMでGM6.1A用に変換しました
URLリンク(www2.uploda.org)
PASSは GT
このobject3の変数 "near"がおかしいです
クリックでobject0を近づけると
ちゃんとスクリプトやCreateイベントで定義してあるのに
Unknown variable near で
エラーになります
バグでしょうか?

584:名前は開発中のものです。
08/12/13 16:00:12 682sG2h4
多分ここだろ。
with (ebul){
move_towards_point((near).x,(near).y,2)
}
with文内の変数は呼び出し元(この場合object3)の変数の意味にならないよ。
ちゃんと other. をつけてやらんと。(詳しくはヘルプ参照)

以下のように修正したらエラーは出なくなったぞ。仕様かどうか分からんが。
move_towards_point((other.near).x,(other.near).y,2)

つーか、こんなことでツール側のバグとか疑うなよ・・・。自分のバグじゃないかw

585:583
08/12/13 16:21:59 K75p9U8G
>>584
wwww
そうでしたね
修正します

586:名前は開発中のものです。
08/12/14 22:59:58 VLzMeB5w
>>585
>wwww
とか
>バグでしょうか?
言い出す前に、テメーの無能を疑えよな

587:名前は開発中のものです。
08/12/15 14:09:14 VQe5+xHL
>>586には同意としても
なんとなく高圧的な人増えたな。嫌味っぽく言ってもなんもならんのに

588:名前は開発中のものです。
08/12/15 18:09:05 6p1v9SNR
質問する側もちょっとは考えろという事でしょう

589:名前は開発中のものです。
08/12/16 11:54:03 Pj6nrR98
RPG的なものを作っているのですが、手に入れたアイテムをアイテム欄などで取得順に表示したり
カーソルが合わさっているとき使用するとそのアイテムの効果が現れたりするにはどうすればいいのでしょうか。
アイテム自体は全部完成しており、アイテム名のスプライトやシステム上の番号等は割り振ってあります。5.3です

590:名前は開発中のものです。
08/12/16 12:21:24 KxWOE/yV
オブジェクト(例えば、主人公のオブジェクトとか)に取得したアイテムを管理する配列を用意して、
取得したアイテム番号を代入していく感じにすればイイのでは?

get_item[0] = 取得したアイテム番号
[]内は取得するに従い数値を上げていけばよい。
配列の長さを調べる術はないので、自分で管理しないといけない。

もしくは、データ構造で map が使えるなら、それを使ってもよい。
たとえば、キーネームをアイテム名、値に所持数とやると管理しやすい。
ただし、mapはキーネームでソートされてしまうんで、取得順となると工夫しないといけないね。

アイテムメニューのシステムは面倒だが地道にやるしかないのでは。
カーソルの操作処理とかも、いちいちオブジェクトを用意してやらないといけない。

アイテム効果を発動させるには、
メニュー欄に表示されるアイテムオブジェクトに、
使用するときのキー入力イベント(mouseクリックボタン等)を持たせて、
そのイベント内で、
・アイテム効果発動
・アイテム消費
の処理を記述していく感じかな。

概念的なことしか書いてないが、参考になれば。

591:名前は開発中のものです。
08/12/17 08:18:19 BlN9VESD
アイテムAを取った時にグローバル変数に1をプラスして、アイテムAの変数にグローバル変数+1を代入。
アイテムを使用した時はグローバル変数から1マイナスする。

ってな感じでどうかな?

592:名前は開発中のものです。
08/12/18 00:08:00 A6CnLTdh
instance_id[] のインデックス使えないかなと思ったけど
これ自体キューになってるんだね。そりゃそうか

593:濱田
08/12/18 18:33:59 5x5AGIoL
 ゲーム作成ツールGameMaker で商業ソフトを作成、販売することは合法でしょうか?
 またファイナルファンタジータクティクスのようなクォータビューのSRPGは製作可能でしょうか?

594:名前は開発中のものです。
08/12/18 18:49:28 zjRT977K
>>593
課金版なら可能。それと理論上はどんなゲームでも作れる。

595:名前は開発中のものです。
08/12/18 19:00:44 AtKHrczp
えーと変数を使用したアクションを実行すると
ERROR in .....posution 1:UnKnown variable {変数名}
ってでるんですけど原因わかる人いたら教えてください

596:名前は開発中のものです。
08/12/18 19:06:15 uRYQk5PQ
>>595
初期値定義してないんじゃね?

597:名前は開発中のものです。
08/12/18 20:00:57 AtKHrczp
>>596
ゲーム作り初心者ですみません・・・
初期値定義ってなんですか?

598:名前は開発中のものです。
08/12/18 20:23:37 9UDCWn2j
変数に最初の値を定義するってこと

599:名前は開発中のものです。
08/12/18 20:34:28 AtKHrczp
>>599
ありがとうございます。
何とかできました。

600:名前は開発中のものです。
08/12/18 22:15:12 BD5z/Zcu
>>594
非レジスト(Lite)版でも商用利用可だよ。EULA見た限りでは、商用不可のはβ版だけ。
レジストしてないと「GameMakerで作りました」ってロコが出るからカッコ悪いことになるけど。

>>595
その「.....」の中にも割と重要な手がかり(イベント名とか)が含まれてることがあるので
今後はなるべく省略なしで頼む。

601:名前は開発中のものです。
08/12/18 23:23:16 gWEUu2RB
初心者とか変に短文にしようとするから困る

・長文でもいいから情報を小出しにするな
・現在どうなってるのか提示
・目的を明確に

この3つそろそろテンプレに入れた方がいいんじゃないか?

602:名前は開発中のものです。
08/12/18 23:35:13 9UDCWn2j
まあ正論だけど
もう解決したからいいんじゃない

603:名前は開発中のものです。
08/12/19 00:51:49 AK9HTeCg
何がわからないのかわからないもんさ

604:名前は開発中のものです。
08/12/19 01:06:57 QZODxzKf
ゲーム起動時のローディングの時に出せる画像ですが、
あれをアニメ(gif)にしたり複数用意した画像の中からランダムで一枚を表示、などということは可能でしょうか?

605:名前は開発中のものです。
08/12/19 11:57:53 OJi6EA5S
URLリンク(www.uploda.org)

使えるかどうかわからないけど
ポーズのスクリプト書いてみた。

初期値 global.move=0 のあと
このスクリプト読めばば動くはず。

カウントや時間を使ってる、またオブジェクトの生成、消去の部分は別途、

if (global.move =0)
{
  ~~~~~
}

でくくってあげればいいはず。

606:605
08/12/19 12:03:25 OJi6EA5S
書き忘れてたけどスクリプトの読み込みはkeypress時ね

607:名前は開発中のものです。
08/12/19 20:40:28 7ZgwG0BV
消えるのはや!
ありがたく貰おうと思ったらもう404…

608:濱田
08/12/19 21:11:16 sOxi3S7i
Game Maker 5.3A で作成したゲームをVistaでする事は出来ますか?

609:名前は開発中のものです。
08/12/19 21:12:39 7ZgwG0BV
できるよ。

610:名前は開発中のものです。
08/12/20 10:28:38 rZvj3mwD
>>607
その1
if (global.move = 0)
{
global.move = 1;
global.pause = instance_count;
for(i=0; i<global.pause; i+=1)
{
array_a[i,1] = instance_id[i].gravity;
array_a[i,2] = instance_id[i].gravity_direction;
array_a[i,3] = instance_id[i].hspeed;
array_a[i,4] = instance_id[i].vspeed;
array_a[i,5] = instance_id[i].path_speed;
instance_id[i].gravity = 0;
instance_id[i].gravity_direction = 0;
instance_id[i].hspeed = 0;
instance_id[i].vspeed = 0;
instance_id[i].path_speed = 0;
}
for(i=0; i<8; i+=1)
{
array_b[i,1] = background_hspeed[i];
array_b[i,2] = background_vspeed[i];
background_hspeed[i] = 0;
background_vspeed[i] = 0;
}
}

611:名前は開発中のものです。
08/12/20 10:29:35 rZvj3mwD
その2
else
{
global.move = 0;
for(i=0; i<global.pause; i+=1)
{
instance_id[i].gravity = array_a[i,1];
instance_id[i].gravity_direction = array_a[i,2];
instance_id[i].hspeed = array_a[i,3];
instance_id[i].vspeed = array_a[i,4];
instance_id[i].path_speed = array_a[i,5];
}
for(i=0; i<7; i+=1)
{
background_hspeed[i] = array_b[i,1];
background_vspeed[i] = array_b[i,2];
}
}

書ききれないから2つに分けたけどこれだけ

612:名前は開発中のものです。
08/12/20 21:00:05 4d+YUfVI
ゲームの遷移状態を管理するオブジェクトに
ポーズ状態をループさせるほうがいいと思うんだけどなあ

各インスタンスの変数を一括処理するのは思わぬバグが出るときがあるから
できるだけ避けたほうがいいよ
現にアラーム処理が抜けているような

613:名前は開発中のものです。
08/12/21 11:14:37 PzRsHlBP
instance_activate...とinstance_deactivate...を使う方法もある。
あと、>>31にルーム移動を使ったポーズがある。

614:濱田
08/12/21 13:39:17 OMCEofD9
GMver7で日本語表示するにはどうすればいいでしょうか?
初めてGMでゲーム作成する者ですがバージョン5,3A. 6. 7 .どれを使えばいいでしょうか?

615:名前は開発中のものです。
08/12/21 14:13:03 susUXEb/
あるオブジェクトAにオブジェクトB(いくつもある)が重なった時にEnterを押すと
重なっているBだけが消えるようにしたいのですがどのようにアクションを組めばいいのでしょうか

616:名前は開発中のものです。
08/12/21 15:46:08 xad+zz/A
音ゲーチックな物を作ろうとしているのですが、soundに音楽を入れ再生した場合ズレが生じたりはしないでしょうか。
するとしたらできるだけ軽減する方法はありますか?

617:名前は開発中のものです。
08/12/21 16:03:49 J97WFZEv
>>615
アクションの中にIf there is an objectみたいなのがある。
BのEnterキーアクションの中でそれを使って、Aと重なっていたら自分を消せばいい。

>>614
>1の非公式情報サイトへGo
っていうか、その質問だとすでに7使うこと前提じゃないの?
とりあえずバージョンごとの違いとか、今まで聞いてきたことも
このスレ内にちゃんと情報があるのでまずは頭から読んできて。

618:名前は開発中のものです。
08/12/22 01:31:06 FUN2QKHC
なんか、大雑把な質問になりますけど、

変数を用意していない状態などで
relative用いて変数増やそうとしたり、分母0の割り算とかすると、
エラーメッセージが出て、プレイが中断されますよね?

テストプレイ中、エラーメッセージが出ずに、OS巻き込んで
フリーズしたり電源落ちたりしてしまうことの原因で
考えられることって何があるでしょうか…。

619:名前は開発中のものです。
08/12/22 02:11:18 UfdezWih
OSの種類もGMのバージョンもどんな状況でなるのかも分からず姉妹

620:名前は開発中のものです。
08/12/22 13:45:56 VIUd8eyr
OS:windows xp sp2
CPU:pen4 3Ghz
Memory:2G
GM7 pro
処理落ちなどはなく、いきなりフリーズもしくは電源落ちします。

状況…なんですが、これが分からないんですよ。
1度起きた状況を再度再現しようとしたら、何回やっても全然問題なく動いたりするし。

2Dアクションゲームで、ボス敵が岩を投げるんですが、そのときその岩に対し
主人公キャラがジャンプ斬りをあてた時(その時ボスは防御していました)
フリーズしました。
岩は「敵の攻撃」を親オブジェクトに持っていますが、
それまで何百回と出てきた「敵の攻撃」に対して同じ攻撃を当てた時はそのようなことはなかったです。
何らかの変数がオーバーフロウした時、似たようなことになった気もしますが、
そういうコードもなさそうです。

フリーズしてしまう原因として挙げられる要因(例えばオーバーフロウ等)、
どなたかご存知の方おられないでしょうか…。。

621:名前は開発中のものです。
08/12/22 21:09:57 Ff2Oxw5o
>>620
その処理の中でオブジェクトの生成・削除・変更などしているとしたら
イベントの無限呼び出し(Createイベントの中で同じオブジェクトをCreateするとか)
が原因でスタックオーバーフローすることはあり得る。
あるいはコード的な無限ループとか。それで電源落ちるとまでは考えにくいけどね。
何らかのエフェクトを生成しているとしたら、ビデオドライバとの相性かもしれない。

622:620
08/12/24 13:52:00 j2sRIJLR
遅レスすいません。
無限呼び出しもないと思います。

そうですよね、、コード無限ループの場合、ゲームアプリのみが
シャットダウンするに留まる程度だったような記憶があります。

未だ解決されていないのですが、起こる確率がかなり
低い様子ではあるので、この問題は一旦置いておくことにします。

ありがとうございました。

623:名前は開発中のものです。
08/12/24 19:15:30 Je0ZC97P
前に変数のエラーを書いたものです。
変数の初期値定義のやり方がわからないんですけど、教えてください。

624:名前は開発中のものです。
08/12/24 19:27:04 Xm8ZsJDZ
>>599は何だったんだ

625:名前は開発中のものです。
08/12/25 00:32:19 lTYGyE3i
非公式情報サイト10回読破して来い

626:名前は開発中のものです。
08/12/25 01:47:33 LZR7eQes
何も置いてない部屋で「そのボールを四つ『A』って書いてある箱に入れといて」なんて言われても困るでしょう。
カラの入れ物を前もって用意しておかなきゃいけない
初期値定義なんて難しく(?)いうと混乱するかもしれないけど、
要は使いたい変数があるなら数値代入とかする前に数値0で変数を用意しておけ、ってこと。

オブジェクト「箱」の変数Aに+2とかしたいんだったら
「箱」のクリエイトイベントかどこかに「変数Aを0として用意」しておかないとAが見当たらないなんてことになってエラーが起きる。

627:名前は開発中のものです。
08/12/25 19:40:35 wKjFbyzV
>>624
前は何故かGM5から7に変えたらできるようになったから
解決と思ってました・・
>>626
オブジェクトが作られたときに発生するイベントに変数のアクションで
変数を0にして入れたら
解決しました。 教えてくれて助かりました。
ありがとうございます。

628:名前は開発中のものです。
08/12/25 23:16:41 FQPSIRUG
イベントとアクションで書いたものをGMLコードとして見ることはできますか?

629:名前は開発中のものです。
08/12/25 23:56:07 lTYGyE3i
ObjectのShow Informationってボタンで見れたような気がする

630:名前は開発中のものです。
08/12/26 15:57:01 PhPwcMia
これってコンピューター言語を使って自分でプログラム組めたりするの?
それと他のソフトとリンクしたりできる??
そういうのを後々やっていきたいんだけど

631:RMT-WM
08/12/26 16:33:47 K4aSBGcm
<a href="URLリンク(blog.rmt-wm.com)">RMT-WMのブログ</a> ページへようこそ!

632:名前は開発中のものです。
08/12/26 19:46:25 KU6Gan+K
>>629
やっぱそれぐらいしかないすか

633:名前は開発中のものです。
08/12/26 21:37:08 L5Xtp1pR
>>630
GameMaker だけでは、Windows APIやプログラミング言語用のライブラリを直接使うようなプログラムは無理。
あくまでゲーム製作用ツールだからね。
ほかのソフトというか、ほかの言語(C++とか)で作ったDLLを呼び出すことは可能なので、
自作プログラムや、自作DLLで制御可能な他のソフトとの連携は可能。

なもんで、WindowsAPI とリンクさせることももちろん可能で、
例えばダイアログボックスをつくって、
そこからGameMakerでつくった自作ゲームに制御を加えるなんてことも出来る。

もちろん、Windowsプログラミングの知識がそれなりに必要。
流行の(?) .NET との連携は難しそうだね。

634:名前は開発中のものです。
08/12/26 21:38:56 L5Xtp1pR
追記。DLLを扱える機能は Pro バージョンのみです。

635:名前は開発中のものです。
08/12/26 22:56:29 SuoE1taa
MPのようなゲージを作って、MPが10以上の時にボタンを押すと
MPを10消費して飛び道具が撃てるという設定を作りました。
その結果、何故か描写されているMPゲージが10以下にならず(もちろん内部も)、打ち放題になってしまう現象が起きました。
これのほかにはMPは以下にならない程度しかMPに関連する変数を弄っていないのですが何がいけないのでしょうか。

636:名前は開発中のものです。
08/12/26 23:11:14 SxF5ePcK
>>635
普通そういうのは実際のソース見なけりゃ答えられん。が、もし

If MPが10以上なら
 MPを10減らす
飛び道具を撃つ

みたいに組んでるなら

If MPが10以上なら
 ▲<Start of block>
 MPを10減らす
 飛び道具を撃つ
 ▼<End of block>

こう囲め。

637:名前は開発中のものです。
08/12/27 00:34:43 zgTmgbXH
スプライトを透過させたい時に透過を選ぶとドット絵に穴があいたような感じになりますが
ああではなく後ろの色が映るいわゆる半透明にしたいのですが可能でしょうか

638:名前は開発中のものです。
08/12/27 01:12:00 Glw8dwT3
>>637
単純に画像全体を半透明にしたいならどのverでもOK(未レジストでも)
スプライトのalphaプロパティを弄れば良い

ピクセルごと透明度が異なるような表現(例えば輪郭にアンチエイリアス)がしたいなら
ver6以降のレジスト版か、あるいは外部DLLを使えばver6以前のGMでも可能かも
ついでに確かver7レジスト版から32bitPNGが扱えたはず

639:名前は開発中のものです。
08/12/27 15:43:46 bMiIzurr
アクションゲームを作っています。
フォーラムなどを参考にしてジャンプして地面に着地などはできるようになったのですが、
ジャンプ中やダッシュ中に障害物に当たると(毎回起こるわけではないのですが)コリジョンの設定が悪さをしているのか遥か上空に吹っ飛んだりあらぬところにワープしてしまいます。
障害物は上に乗れるので親を地面と同じにしています。
横移動やジャンプ中の接触(上や横)に対するコリジョンはどう設定すればいいのでしょうか。バージョンは5.3です

640:名前は開発中のものです。
08/12/27 19:56:55 zgTmgbXH
>>638
できました、ありがとう

ついでにもう一つ質問です
キーボードを押しっぱなしの時にアクションを起こしているのですが
特定状況下で「プレイヤーはキーを押しっぱなしだけど内部ではそのキーは押されていない」と言う処理を行いたいのです。
これは可能でしょうか。

641:名前は開発中のものです。
08/12/27 21:54:29 mqdpfh1K
>>639
ソース見なきゃわからん

642:名前は開発中のものです。
08/12/27 21:58:58 mqdpfh1K
>>640
理解力が無いから俺の想像だけど
例えば変数1の時はAキーを押すとアクションが発生するけど、変数が2の時はAキーを押しても発生しないって事で良いかな?

もしそうならキーを押すイベントでIf an exprssion is trueを使えば良いと思う

643:名前は開発中のものです。
08/12/28 01:10:46 lQUrTnBK
ついに登場!アクションゲームツクール
URLリンク(www.famitsu.com)

アクションゲーム制作の決定版!Multimedia Fusion2 国内販売推進委員会
URLリンク(www7a.biglobe.ne.jp)
URLリンク(hp.vector.co.jp)

644:名前は開発中のものです。
08/12/28 05:48:32 1w+FYaO/
なんか使ってるうちにアクションは全部スクリプトで処理になるよね?
管理と編集が楽になるよね?

645:名前は開発中のものです。
08/12/28 15:22:43 cZXYtdqt
あえてアイコン方式で記述する意味がないからなあ
コードがかけなくても作れるってのを謳い文句にしてるけど
制約の中アイコン記述を覚えてもしょうがないんだよな

646:名前は開発中のものです。
08/12/28 17:21:40 LlMEzWDN
ただ、スクリプト記述するよりもアイコンの方が処理が早い罠w

647:名前は開発中のものです。
08/12/28 19:00:32 fT956MDj
アクションゲームで左右キーを押すとキャラが左右に動くのですが
坂道などでは段差でカクカクしたりしてしまいます。
なめらかに動かすには当たり判定や動きをどう設定すればいいでしょう。

648:名前は開発中のものです。
08/12/28 20:37:31 cZXYtdqt
>>646
Scriptsは呼び出し自体が重いから差が顕著に出るけど
piece of code だとほとんど変わらないような気がする

>>647
ピクセル単位で当たり判定を取っていたりしないかな
矩形や簡易図形で当たり判定を取るようにすればよくなるんじゃないかと

少し上にもあったけど、当たり判定処理がうまくいかないとかは
○○のエラーがでますというのと違って、プログラムは良くも悪くも書いた通りにしか動かないから
周辺の情報を出さないと条件式を見直せぐらいしか答えようがなくなってくるよ


649:名前は開発中のものです。
08/12/28 21:00:33 fT956MDj
正確な当たり判定を取るとキャラクターの足が動くたびに判定がおかしくなるのでとりあえず大きさに合わせて四角にしています。
足場も同様ですが斜めの床を作る際斜めにすると三角でマスクしても微妙なドットのせいでかくかくしてしまうのです。

650:646
08/12/28 23:34:43 LlMEzWDN
>>648
昔、timeGetTime()を呼び出すDLLを作って実験してみたことがあったんだ。
今また試しにやってみたところ、変数の代入なら varアイコンを使うより piece of code の方が早かった。
が、instance_create() の呼び出しは、アイコンの方が早かった。

即効作ったソース。
URLリンク(www3.uploda.org)



651:646
08/12/29 00:02:49 gdKazmBS
ああ、忘れてた。
>>650 の受信pass : gamemaker
スレ汚しごめんなさい。

652:名前は開発中のものです。
08/12/29 01:21:50 PIejyGZB
床のコリジョンを作っていますが
今の段階だと床に当たった時に起きるアクションと空中にある床に頭から接触したとき、
壁に横から接触したときのアクションが同じになってしまいます。
コリジョンを方向によってわける方法を教えてください

653:名前は開発中のものです。
08/12/29 03:11:36 p4VZEUac
vspeed > 0 && y < other.y+18
ってんでどうかな
これは上からね

654:645
08/12/29 13:44:03 T1r41zQH
>>650
404・・・自分でも確かめられることなのでやってみた
repeat loop 20000 回でinstance_create()をGMのcurrent_timeで比較してみた
確かにアイコンの方が早いみたいですね。平均20msぐらい差が出ました
一応環境
XP SP3
Celeron M 1.3 GHz
GMのcurrent_timeの精度もあるので相対比較という感じです

655:濱田
08/12/29 20:51:48 hLjua+tb
日本語訳の手に入れ方が分かりません。どうすればいいでしょうか?

656:名前は開発中のものです。
08/12/29 21:44:28 quafeWvW
みんな買ってんの?
PROだとエフェクト楽しいのかな


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch