質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

591閲覧

2Dアクションゲーム ボタンを押す時間に応じてジャンプの高さを変えたい

entd270

総合スコア19

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/07/09 12:55

前提・実現したいこと

Android Studioを使ってアンドロイドで動作するマリオのような2Dアクションゲームを制作しています。
キャラクターの移動やジャンプ、ブロックとの当たり判定などゲームのベースとなる機能は一通り完成しました。
しかしジャンプの仕様を変更したくて、考えているのですが、詰まってしまっています。
完成してあるジャンプの機能というのは、ボタンを押した時の時間をボタンを離した時間から引いて、その時間の長さに応じてジャンプが高さが決まるというものです。
これだと、ボタンを離した時にジャンプが始まるため、なんだか違和感があります。

そのため、マリオのようにボタンを押した瞬間にジャンプが始まり、ジャンプを始めてからジャンプボタンを押している時間に応じて高さが変わるように変更したいです。

調べて見ても、unityの記事ばかりで何から手をつけていいのかわからなくなってしまいました。
そもそもあのジャンプがどういう仕組みで実現できているのかがわからないです。
まる投げ質問のようになってしまって大変申し訳ないのですが、少しアドバイスをいただきたいです。

全てのコードを載せてもわかりずらくなるだけだと思うので、
現在のジャンプ機能の部分に当たるコードを下に書きます。
どうぞ、よろしくお願いいたします。

該当のソースコード

java

1imageButtonJump.setOnTouchListener(new ImageButton.OnTouchListener() { // タッチされた時に受ける関数を設定 2 3 @Override 4 public boolean onTouch(View v, MotionEvent event){ 5 int action = event.getAction(); 6 switch(action){ 7 case MotionEvent.ACTION_DOWN:{ // ボタンに触った時にここに来る 8 touchDownStartTime = System.currentTimeMillis(); 9 return true; 10 } 11 case MotionEvent.ACTION_UP:{ // 指がボタンから離れたらここに来る 12 float time = System.currentTimeMillis() - touchDownStartTime; 13 gameView2.jumpDroid(time); 14 touchDownStartTime = 0; 15 break; 16 } 17 } 18 return false; 19 } 20 }); 21

java

1public void jumpDroid(float time){ 2 if(droidCallback.getDistanceFromGround(droid) > 0){//キャラが空中にいるときはジャンプできないようにする 3 return; 4 } 5 droid.jump(Math.min(time,MIN_TOUCH_TIME)/MAX_TOUCH_TIME);//ジャンプの上限を決めています 6 }

java

1public void jump(float power){//powerに応じて高さが決まる 2 velocity = (power * WEIGHT); 3 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

マリオのジャンプを見ていると、おそらく

  • 押している間、等速で上昇する
  • ボタンを離すと、そこから上下方向は鉛直投げ上げのような速度変化。ただし落下の速さに上限(上昇時と同じ速さ)

なのかなと思います。なので、常時「ボタンが押されているか」のチェックをするところが必要になるのではないでしょうか。

投稿2019/07/10 01:29

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

entd270

2019/07/10 01:37

swordoneさん、ご回答ありがとうございます。 ジャンプの仕組みは理解できました。ありがとうございます。 常時チェックという点について、もう一つ質問してもよろしいでしょうか。一般的に、常時チェックという機能を実装するには、Javaなら、timerなどをつかって、短い時間周期で、ある処理を実行して、判定するという流れでいいのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問