HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0207
ロマンobaqでのアクションゲーム作成3解決


ロマン

リンク

2024/2/7(Wed) 21:59:19|NO.101174

はじめまして ロマンと申します。

今obaqを用いたアクションゲームを作ろうと思い、触り始めたのですが
そこでいくつかわからないことがあり質問させていただきます。

1.デスクトップパソコンとノートパソコンを使っているのですがモニターのサイズが違い画面いっぱいにウィンドウを表示できません。screenを使ってサイズを合わせているのですが、screenを使わずに画面いっぱいに表示する方法を教えてください。
 
2.コリジョンでジャンプできるかどうかを判定しているのですが、ブロックからジャンプせずに落ちた場合空中でジャンプできてしまいます。空中ではジャンプできないようにする方法を教えてください。

3.コリジョンで判定しているので壁と接触している際もジャンプしてしまいます。以下のスクリプトでは違うコリジョングループのオブジェクトを挟んで対処しているのですがより簡単に対応できる方法を教えてください。

4.地面に着地するときに跳ねないようにそっと着地したいのですが1フレーム当たりの計算回数を増やすしか方法はないのでしょうか。

5.qviewを使ったオブジェクトの注視をしたいのですが、qviewを使ってもオブジェクト上ではないところが拡大されてしまいます。オブジェクトの動きに応じて画面が動くようにするにはどうしたらいいでしょうか。


質問3で動かすオブジェクトを十字の形にするように2つのオブジェクトを交差させ、壁に触れてもジャンプしないように試みたのですが失敗しました。
1つのオブジェクトでコリジョンを2つに分けるまたは2つのオブジェクトを離れないようにがっちり固定できれば質問3,4が解決できる気がします。

色々考えてみたのですが全くわかりませんでした。やり方ヒントなどをご教示ください。

以下が作成したスクリプトになります。


#include "obaq.as" screen 0,1280,920,,0,0 qreset ;obaqの初期化 qdamper 0,1.0,0.5 qaddpoly obj,4,40,30,,5,5 ;□ qtype obj,type_bindR,1 ;回転の固定 qdamper obj,1.5,0.2 ;跳ね、摩擦 qinertia obj,0.999 ;惰性 qaddpoly obj2,4,14.3,118,,3,150,0,4,8 qtype obj2,type_bind ,1 ;背景に固定 qaddpoly obj3,4,150,30,,10,10,0,8,4 qtype obj2,type_bindR,1 qaddpoly block,4,80,80,,50,10 qtype block,,1 qdamper block,0.5,0.2 qaddpoly block2,7,260,180,,20,30 qgroup obj,1,,1 ;□のコリジョン qgroup 0,2,,1 ;外壁のコリジョン ;-----------メインループ----------- *main redraw 0 color 0,0,0 : boxf qexec gosub *collision gosub *hantei gosub *move qdraw redraw 1 await 15 goto *main ;---------------------------------- *move stick key,1+4 ;←と→のキーの取得 qspeed obj,pax,pay,par ;□のスピード pax = 0.0 pay = 0.0 par = 0.0 if key & 1 { if sx < 0.0 { pax = -( 0.5 + sx ) * 0.05 ; 限界速度に近づくほど、加速は小さくなる } else { pax = -0.5 * 0.05 ;ブレーキの効きは一定 } } if key & 4 { if sx > 0.0 { pax = ( 0.5 - sx) * 0.05 } else { pax = 0.5 * 0.05 } } if key & 2 { if jump > 1 { pay = -( 0.5 + psy) * 1.3 } jump = -1 } if sy > 0.7 { pay = ( 0.5 - sy ) * 0.05 ;終端速度(地面にめり込んでしまうため) } return *hantei qgetpos obj,px,py,angle qgetspeed obj,sx,sy,sr sdim info notesel info noteadd strf("X座標 :%10.5f",px) noteadd strf("Y座標 :%10.5f",py) noteadd strf("角度 :%10.5f",angle) noteadd strf("X方向速度 :%10.5f",sx) noteadd strf("Y方向速度 :%10.5f",sy) noteadd strf("回転速度 :%10.5f",ar) noteadd strf("jumpの値   :%4d " ,jump) noteunsel color 255,255,255:pos 0,0:mes info return *collision qcollision obj;オブジェクトの指定 qgetcol cobj,cx,cy ;コリジョン情報の取得 ;コリジョン検出時の処理 if cobj>=0{ color ,255,255 circle cx*4-4,cy*4-4,cx*4+4,cy*4+4 ;水色の球を表示 jump += 1 } if jump > 2 : jump = 2 return



この記事に返信する


名無し

リンク

2024/2/8(Thu) 20:20:31|NO.101176

1について。
ディスプレイの解像度に合わせて表示したいという事ですよね?
であれば
screen 0,ginfo(20),ginfo(21),,0,0
で可能だと思いますがどうでしょうか?
ginfo(20)と(21)はデスクトップのXとYサイズを示してます。 詳しいことはF1キーで見れるヘルプやGoogle検索などをしていただければ。 その後ろの0,0の指定ですが、起動時に表示されるウィンドウ位置の指定です。 obaqは分からないので知見のある方にパスします



ロマン

リンク

2024/2/9(Fri) 23:28:20|NO.101194

名無しさん ご回答ありがとうございます。
おかげさまで希望通りに動いてくれました!

また、質問5は自力で解決できました

	qview zoom,zoom,ginfo(20)/2-px*zoom,ginfo(21)/5*4-py*zoom 

をメインループのqexecとqdrawの間に挟むことでオブジェクトの注視が可能になりました。 どうやら半分にすることを忘れてたようです。orz 質問2〜4も解決できるようにご回答お待ちしております。 質問とは関係のないちょっとした疑問なんですが、obaqの仕様上外壁をなくすことはできないのでしょうか?



ロマン

リンク

2024/2/16(Fri) 23:18:13|NO.101248

色々と試行錯誤してみた結果qcnvaxisで座標値を変換した後、その座標で判定し、壁でジャンプしてしまう問題を解決しました。全く見当違いなことを考えてました。。。
質問2はそういう仕様ということで、質問4は反発をできるだけしないようにしました。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101174への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.