Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

プレイヤーをジャンプさせる #2

Closed
h-otter opened this issue Dec 15, 2016 · 8 comments
Closed

プレイヤーをジャンプさせる #2

h-otter opened this issue Dec 15, 2016 · 8 comments
Assignees
Milestone

Comments

@h-otter
Copy link
Owner

h-otter commented Dec 15, 2016

適当な球でもいいのでスペースキーを入力したらジャンプ

implements addKeyListener で行けるはず

player.jump() を呼び出すとPlayerになるようなクラスがジャンプするような感じ

@h-otter h-otter added this to the class1 milestone Dec 15, 2016
@h-otter
Copy link
Owner Author

h-otter commented Dec 15, 2016

  • スペースキーを検知する class playerCtl implements addKeyListener を作成
  • 可能であれば class playerjump() を作成し、適当なオブジェクトがスペースキーでジャンプするようにしてほしい

@mgk797
Copy link
Collaborator

mgk797 commented Dec 21, 2016

なんとかスペースキー検知はできた...
java3dのインストールから躓いてしまったのでそれ以上はできてないです
申し訳ない


import javax.swing.;
import java.awt.
;
import java.awt.event.*;

class playerCtl extends JFrame implements KeyListener{
private JLabel label;

public playerCtl(){
  this.setTitle("Press SPACE!");
  this.setSize(300,200);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  label = new JLabel("",JLabel.CENTER);
  this.add(label,BorderLayout.CENTER);
  addKeyListener(this);
  this.setVisible(true);
}

public void keyPressed(KeyEvent e){
if(e.getKeyCode()==e.VK_SPACE)
    label.setText("hogehoge");
else {}
}

public void keyReleased(KeyEvent e){
}

public void keyTyped(KeyEvent e){
}

public static void main(String argv[]) {
new playerCtl();
}

}


@mgk797 mgk797 closed this as completed Dec 21, 2016
@h-otter h-otter reopened this Dec 22, 2016
@h-otter
Copy link
Owner Author

h-otter commented Dec 22, 2016

ジャンプするところまで頼む~

@h-otter h-otter modified the milestones: class2, class1 Dec 22, 2016
@mgk797
Copy link
Collaborator

mgk797 commented Jan 11, 2017

spacekeyを押すことによってオブジェクトを動かすことはできた(この場合は回転)
ジャンプはまだできていないけどとりあえず。。


//******************************************************************************
//playerCtl.java
//spacekeyを押すとカラーキューブが少し回転するプログラム
//******************************************************************************

import javax.media.j3d.*;

import javax.vecmath.*;

import com.sun.j3d.utils.universe.;
import com.sun.j3d.utils.geometry.
;

import java.awt.;
import java.awt.event.
;

import javax.swing.;
import javax.swing.event.
;

import java.util.*;
import java.util.Timer;

import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;

//==================================================================
//メインクラス
public class playerCtl extends JFrame implements KeyListener
{

//==================================================================
//クラスのフィールド

//仮想空間全体
SimpleUniverse universe;

//オブジェクトのためのグループ
BranchGroup group1;

//オブジェクトの座標変換のためのグループ
TransformGroup transform_group1;

//オブジェクトの座標変換のためのクラス
Transform3D transform1;

//回転角を管理
float rot_value;

//==================================================================
//メインメソッド
public static void main(String[] args) {
playerCtl Ctl = new playerCtl();
}

//==================================================================
//コンストラクタ
public playerCtl(){

    //===============================================================
    //基礎フレームの設定
    //===============================================================

//メイン・ウィンドウ作成
//JFrame frame = new JFrame();

//ウィンドウのタイトル設定
this.setTitle("Press SPACE!");

//ウィンドウのサイズ設定
this.setSize(400,600);

//ウィンドウを閉じる動作の登録
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//ウィンドウに文字を表示する動作
//label = new JLabel("",JLabel.CENTER);

//表示する文字の位置を設定
//frame.add(label,BorderLayout.CENTER);

    //キーボードの入力を検知
addKeyListener(this);

    //コンテントペインを作成
JPanel cp = new JPanel();

    //コンテントペイン上のレイアウトは全て手動で行う
cp.setLayout(null);

    //フレームに、コンテントペインを登録
this.add(cp);


    //===============================================================
    //Java3D関係の設定
    //===============================================================

    //現在使用している画面の、ハードウェア情報を取得する
    GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();

    //Canvas3Dというのが、3Dグラフィクスを表示する領域となる
    Canvas3D canvas = new Canvas3D(g_config);

//3D表示領域の大きさを設定。今回はウィンドウいっぱいに表示する
    canvas.setBounds(0,0,400,600);

    //コンテントペインにCanvas3Dを登録
    cp.add(canvas);


    //===============================================================
    //3D空間を構築
    //===============================================================

    //仮想空間のインスタンスを生成。表示先としてcanvasを指定。
    universe = new SimpleUniverse(canvas);

//オブジェクトの「枝」を1つ作る
group1 = new BranchGroup();

//「カラーキューブ」を1つ生成
ColorCube sp = new ColorCube(0.1f);

//座標変換クラスを生成
transform_group1 = new TransformGroup();

//座標変換の書き換えを許可
transform_group1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

//カラーキューブを座標変換クラスに登録
transform_group1.addChild(sp);

//座標変換内容
transform1 = new Transform3D();

//「枝」に座標変換クラスを登録
group1.addChild(transform_group1);

//仮想空間に「枝」を登録(これは最後に・・・!)
universe.addBranchGraph(group1);

//回転数をリセット
rot_value=0.0f;


//===============================================================
//視点について設定
//===============================================================

//視点についてのハードウェア情報を取得。  
ViewingPlatform vp = universe.getViewingPlatform();

//視点のための座標変換クラスを用意
TransformGroup Camera = vp.getViewPlatformTransform();

//カメラの位置ベクトル
Transform3D view_pos = new Transform3D();

//カメラの位置を決める
Vector3f pos_vec = new Vector3f(1.4f,1.4f,1.4f);

//カメラの位置について、座標変換実行
view_pos.setTranslation(pos_vec);

//カメラの向きを示すベクトル
Transform3D view_dir = new Transform3D();
Transform3D view_dir2 = new Transform3D();

//カメラの向きを決める
view_dir.rotY(Math.PI/4);
view_dir2.rotX(-Math.PI/4 + 0.1f);
view_dir.mul(view_dir2);

//カメラの位置およびカメラの向きを統合 
view_pos.mul(view_dir);

//カメラの位置情報を登録
Camera.setTransform(view_pos);


//ウィンドウを可視化
this.setVisible(true);

    //キー入力を有効化
setFocusable(true);

}

 //=================================================================
//spacekeyを押すとオブジェクトが回転する操作
public void keyPressed(KeyEvent e){

if(e.getKeyCode()==e.VK_SPACE){
    
    //回転角を増やす
    rot_value+=Math.PI/10;

    //回転の座標変換実行
    transform1.rotY(rot_value);

    //座標変換を登録
    transform_group1.setTransform(transform1);

    //1回転したら、回転角をリセットしておく
    if(rot_value>Math.PI*2)
	{
	    rot_value=0.0f;
	}

}
else {}
}

public void keyReleased(KeyEvent e){
}

public void keyTyped(KeyEvent e){
}

}

//==================================================================


@mgk797
Copy link
Collaborator

mgk797 commented Jan 11, 2017

ちょっと修正
(import部分の修正と、全角スペース文字の削除)
(さっきのプログラムとの区別のため、ファイル名をplayerCtl→ExplayerCtlに変更)

//******************************************************************************
//ExplayerCtl.java
//spacekeyを押すとカラーキューブが少し回転するプログラム
//******************************************************************************
import javax.media.j3d.;
import javax.vecmath.
;
import com.sun.j3d.utils.universe.;
import com.sun.j3d.utils.geometry.
;
import java.awt.;
import java.awt.event.
;
import javax.swing.;
import javax.swing.event.
;
import java.util.*;
import java.util.Timer;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
//==================================================================
//メインクラス
public class ExplayerCtl extends JFrame implements KeyListener
{
//==================================================================
//クラスのフィールド
//仮想空間全体
SimpleUniverse universe;
//オブジェクトのためのグループ
BranchGroup group1;
//オブジェクトの座標変換のためのグループ
TransformGroup transform_group1;
//オブジェクトの座標変換のためのクラス
Transform3D transform1;
//回転角を管理
float rot_value;
//==================================================================
//メインメソッド
public static void main(String[] args) {
ExplayerCtl Ctl = new ExplayerCtl();
}
//==================================================================
//コンストラクタ
public ExplayerCtl(){
//===============================================================
//基礎フレームの設定
//===============================================================

//メイン・ウィンドウ作成
//JFrame frame = new JFrame();

//ウィンドウのタイトル設定
this.setTitle("Press SPACE!");

//ウィンドウのサイズ設定
this.setSize(400,600);

//ウィンドウを閉じる動作の登録
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//ウィンドウに文字を表示する動作
//label = new JLabel("",JLabel.CENTER);

//表示する文字の位置を設定
//frame.add(label,BorderLayout.CENTER);

//キーボードの入力を検知

addKeyListener(this);

//コンテントペインを作成

JPanel cp = new JPanel();

//コンテントペイン上のレイアウトは全て手動で行う

cp.setLayout(null);

//フレームに、コンテントペインを登録

this.add(cp);

//===============================================================
//Java3D関係の設定
//===============================================================

//現在使用している画面の、ハードウェア情報を取得する
GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();

//Canvas3Dというのが、3Dグラフィクスを表示する領域となる
Canvas3D canvas = new Canvas3D(g_config);

//3D表示領域の大きさを設定。今回はウィンドウいっぱいに表示する
canvas.setBounds(0,0,400,600);

//コンテントペインにCanvas3Dを登録
cp.add(canvas);


//===============================================================
//3D空間を構築
//===============================================================

//仮想空間のインスタンスを生成。表示先としてcanvasを指定。
universe = new SimpleUniverse(canvas);

//オブジェクトの「枝」を1つ作る
group1 = new BranchGroup();

//「カラーキューブ」を1つ生成
ColorCube sp = new ColorCube(0.1f);

//座標変換クラスを生成
transform_group1 = new TransformGroup();

//座標変換の書き換えを許可
transform_group1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

//カラーキューブを座標変換クラスに登録
transform_group1.addChild(sp);

//座標変換内容
transform1 = new Transform3D();

//「枝」に座標変換クラスを登録
group1.addChild(transform_group1);

//仮想空間に「枝」を登録(これは最後に・・・!)
universe.addBranchGraph(group1);

//回転数をリセット
rot_value=0.0f;

//===============================================================
//視点について設定
//===============================================================

//視点についてのハードウェア情報を取得。
ViewingPlatform vp = universe.getViewingPlatform();

//視点のための座標変換クラスを用意
TransformGroup Camera = vp.getViewPlatformTransform();

//カメラの位置ベクトル
Transform3D view_pos = new Transform3D();

//カメラの位置を決める
Vector3f pos_vec = new Vector3f(1.4f,1.4f,1.4f);

//カメラの位置について、座標変換実行
view_pos.setTranslation(pos_vec);

//カメラの向きを示すベクトル
Transform3D view_dir = new Transform3D();
Transform3D view_dir2 = new Transform3D();

//カメラの向きを決める
view_dir.rotY(Math.PI/4);
view_dir2.rotX(-Math.PI/4 + 0.1f);
view_dir.mul(view_dir2);

//カメラの位置およびカメラの向きを統合
view_pos.mul(view_dir);

//カメラの位置情報を登録
Camera.setTransform(view_pos);

//ウィンドウを可視化
this.setVisible(true);

//キー入力を有効化

setFocusable(true);

}
//=================================================================
//spacekeyを押すとオブジェクトが回転する操作
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==e.VK_SPACE){

//回転角を増やす
rot_value+=Math.PI/10;

//回転の座標変換実行
transform1.rotY(rot_value);

//座標変換を登録
transform_group1.setTransform(transform1);

//1回転したら、回転角をリセットしておく
if(rot_value>Math.PI*2)
{
    rot_value=0.0f;
}

}
else {}
}

public void keyReleased(KeyEvent e){
}

public void keyTyped(KeyEvent e){
}
}
//==================================================================


@mgk797
Copy link
Collaborator

mgk797 commented Jan 18, 2017

ジャンプはできました

現在確認できている問題点
・キー長押しによる連続入力は無効にできたが、キー連打による連続入力はまだ有効
 (つまり、ジャンプ中にスペースキーを押すと、推した回数だけ連続ジャンプしてしまう)
・java playerCtl でプログラムを実行後、すぐにスペースキーを押すと反応しなくなる
・マウスポインタでウィンドウをクリックすると反応しなくなる


//******************************************************************************
//playerCtl.java
//spacekeyを押すとオブジェクトがジャンプするプログラム
//******************************************************************************

import javax.media.j3d.*;

import javax.vecmath.*;

import com.sun.j3d.utils.universe.;
import com.sun.j3d.utils.geometry.
;

import java.awt.;
import java.awt.event.
;

import javax.swing.;
import javax.swing.event.
;

import java.util.*;
import java.util.Timer;

import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;

//==============================================================================
//メインクラス
public class playerCtl extends JFrame implements KeyListener
{

//=============================================================================
//クラスのフィールド

//仮想空間全体
SimpleUniverse universe;

//オブジェクトのためのグループ
BranchGroup group1;

//オブジェクトの座標変換のためのグループ
TransformGroup transform_group1;

//オブジェクトの座標変換のためのクラス
Transform3D transform1;

//回転角を管理
float rot_value;

//ジャンプ時のy座標
public double distance;

//キーの長押しを判定
boolean hasBeenReleased = true;

//=============================================================================
//メインメソッド
public static void main(String[] args) {
playerCtl Ctl = new playerCtl();
}

//=============================================================================
//コンストラクタ
public playerCtl(){

    //======================================================================
    //基礎フレームの設定
    //======================================================================

//ウィンドウのタイトル設定
this.setTitle("Press SPACE!");

//ウィンドウのサイズ設定
this.setSize(400,600);

//ウィンドウを閉じる動作の登録
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //キーボードの入力を検知
addKeyListener(this);

    //コンテントペインを作成
JPanel cp = new JPanel();

    //コンテントペイン上のレイアウトは全て手動で行う
cp.setLayout(null);

    //フレームに、コンテントペインを登録
this.add(cp);


    //======================================================================
    //Java3D関係の設定
    //======================================================================

    //現在使用している画面の、ハードウェア情報を取得する
    GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();

    //Canvas3Dというのが、3Dグラフィクスを表示する領域となる
    Canvas3D canvas = new Canvas3D(g_config);

//3D表示領域の大きさを設定。今回はウィンドウいっぱいに表示する
    canvas.setBounds(0,0,400,600);

    //コンテントペインにCanvas3Dを登録
    cp.add(canvas);


    //======================================================================
    //3D空間を構築
    //======================================================================

    //仮想空間のインスタンスを生成。表示先としてcanvasを指定。
    universe = new SimpleUniverse(canvas);

//オブジェクトの「枝」を1つ作る
group1 = new BranchGroup();

//「カラーキューブ」を1つ生成
ColorCube sp = new ColorCube(0.1f);

//カラーキューブを球に変えたい時はこちらを使う
//Sphere sp = new Sphere(0.1f, new Appearance() );

//座標変換クラスを生成
transform_group1 = new TransformGroup();

//座標変換の書き換えを許可
transform_group1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

//カラーキューブを座標変換クラスに登録
transform_group1.addChild(sp);

//座標変換内容
transform1 = new Transform3D();

//「枝」に座標変換クラスを登録
group1.addChild(transform_group1);

//仮想空間に「枝」を登録(これは最後に・・・!)
universe.addBranchGraph(group1);

//回転数をリセット
rot_value=0.0f;


//======================================================================
//視点について設定
//======================================================================

//視点についてのハードウェア情報を取得。  
ViewingPlatform vp = universe.getViewingPlatform();

//視点のための座標変換クラスを用意
TransformGroup Camera = vp.getViewPlatformTransform();

//カメラの位置ベクトル
Transform3D view_pos = new Transform3D();

//カメラの位置を決める
Vector3f pos_vec = new Vector3f(1.4f,1.4f,1.4f);

//カメラの位置について、座標変換実行
view_pos.setTranslation(pos_vec);

//カメラの向きを示すベクトル
Transform3D view_dir = new Transform3D();
Transform3D view_dir2 = new Transform3D();

//カメラの向きを決める
view_dir.rotY(Math.PI/4);
view_dir2.rotX(-Math.PI/4 + 0.1f);
view_dir.mul(view_dir2);

//カメラの位置およびカメラの向きを統合 
view_pos.mul(view_dir);

//カメラの位置情報を登録
Camera.setTransform(view_pos);


//======================================================================
//回転のためのタイマーを設定
//======================================================================

//Timer timer = new Timer();
//timer.schedule(new player(),0,40);


//ウィンドウを可視化
this.setVisible(true);

setFocusable(true);

}


//==========================================================================
//スペースキーを押したときの処理
//==========================================================================

public void keyPressed(KeyEvent e){

//長押しが終わるまでキー入力を無効にする
if(hasBeenReleased){
    hasBeenReleased = false;

    //スペースキーの検知
    if(e.getKeyCode()==e.VK_SPACE){

	//内部クラス"player"のメソッド"jump()"を呼び出す
	player play = new player();
	play.jump();
	
    }
}
repaint();
}

public void keyReleased(KeyEvent e){
//長押しが終わったらキー入力を有効にする
hasBeenReleased = true;
}

public void keyTyped(KeyEvent e){
}


//==========================================================================
//内部クラスとしてジャンプの描画を記述
//==========================================================================

class player
{
public void jump()
{
	//ジャンプの描画
	for (double i = 1; i <= 14; i++){

	    /*
	    //回転角を増やす
	    rot_value+=Math.PI/10;

	    //回転の座標変換実行
	    transform1.rotY(rot_value);
	    */

	    //objectのy座標を計算(単純な放物線 y = -(x - 0.7)^2 + 0.49 )
	    distance = -Math.pow((i/10-0.7),2)+0.49;
    
	    //objectの平行移動
	    transform1.set(new Vector3d(0.0, distance, 0.0));
	    
	    //座標変換を登録
	    transform_group1.setTransform(transform1);

	    /*
	    //1回転したら、回転角をリセットしておく
	    if(rot_value>Math.PI*2)
		{
		    rot_value=0.0f;
		}
	    */

	    //描画感覚の設定
	    try{
		Thread.sleep(1000 / 20);
	    } catch (InterruptedException except){}
	    
	}	
}
}


//==========================================================================
//内部クラスとしてタイマー割込みを記述

//サンプルプログラムの名残。ジャンプとは無関係だが一応残しておく

/*
class player extends TimerTask
{
boolean endFlg = false;

public void setEnd(){
    endFlg = true;
}

public void run()
{
    
    //回転角を増やす
    rot_value+=Math.PI/30;

    //回転の座標変換実行
    transform1.rotY(rot_value);

    //座標変換を登録
    transform_group1.setTransform(transform1);

    //1回転したら、回転角をリセットしておく
    if(rot_value>Math.PI*2)
	{
	    rot_value=0.0f;
	    this.setEnd();
	}

}
}
*/

}

//==============================================================================


@h-otter
Copy link
Owner Author

h-otter commented Jan 19, 2017

お疲れ様でした! 🙇

@h-otter h-otter closed this as completed Jan 19, 2017
@mgk797
Copy link
Collaborator

mgk797 commented Jan 26, 2017


//******************************************************************************
//ExtraplayerCtl.java
//spacekeyを押すとオブジェクトがジャンプするプログラムを色々といじっていくプログラム
//
//・背景を画像ファイルに変更(L147のLoadImage内にて画像ファイルを指定)
//変更箇所はL146からL155,L162,L219からL245
//******************************************************************************

import javax.media.j3d.*;

import javax.vecmath.*;

import com.sun.j3d.utils.universe.;
import com.sun.j3d.utils.geometry.
;

import java.awt.;
import java.awt.event.
;

import javax.swing.;
import javax.swing.event.
;

import java.util.*;
import java.util.Timer;

import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;

import java.io.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

//==============================================================================
//メインクラス
public class ExtraplayerCtl extends JFrame implements KeyListener
{

//=============================================================================
//クラスのフィールド

//仮想空間全体
SimpleUniverse universe;

//オブジェクトのためのグループ
BranchGroup group1;

//オブジェクトの座標変換のためのグループ
TransformGroup transform_group1;

//オブジェクトの座標変換のためのクラス
Transform3D transform1;

//回転角を管理
float rot_value;

//ジャンプ時のy座標
public double distance;

//キーの長押しを判定
boolean hasBeenReleased = true;

//=============================================================================
//メインメソッド
public static void main(String[] args) {
ExtraplayerCtl Ctl = new ExtraplayerCtl();
}

//=============================================================================
//コンストラクタ
public ExtraplayerCtl(){

    //======================================================================
    //基礎フレームの設定
    //======================================================================

//ウィンドウのタイトル設定
this.setTitle("Press SPACE!");

//ウィンドウのサイズ設定
this.setSize(1280,720);

//ウィンドウを閉じる動作の登録
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //キーボードの入力を検知
addKeyListener(this);

    //コンテントペインを作成
JPanel cp = new JPanel();

    //コンテントペイン上のレイアウトは全て手動で行う
cp.setLayout(null);

    //フレームに、コンテントペインを登録
this.add(cp);


    //======================================================================
    //Java3D関係の設定
    //======================================================================

    //現在使用している画面の、ハードウェア情報を取得する
    GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();

    //Canvas3Dというのが、3Dグラフィクスを表示する領域となる
    Canvas3D canvas = new Canvas3D(g_config);

//3D表示領域の大きさを設定。今回はウィンドウいっぱいに表示する
    canvas.setBounds(0,0,1280,720);

    //コンテントペインにCanvas3Dを登録
    cp.add(canvas);


    //======================================================================
    //3D空間を構築
    //======================================================================

    //仮想空間のインスタンスを生成。表示先としてcanvasを指定。
    universe = new SimpleUniverse(canvas);

//オブジェクトの「枝」を1つ作る
group1 = new BranchGroup();

//「カラーキューブ」を1つ生成
ColorCube sp = new ColorCube(0.1f);

//カラーキューブを球に変えたい時はこちらを使う
//Sphere sp = new Sphere(0.1f, new Appearance() );

//座標変換クラスを生成
transform_group1 = new TransformGroup();

//座標変換の書き換えを許可
transform_group1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

//カラーキューブを座標変換クラスに登録
transform_group1.addChild(sp);

//座標変換内容
transform1 = new Transform3D();

//背景の設定
BufferedImage image = loadImage("C:\\J3D\\DATA\\jone9lock.jpeg");
BranchGroup objRoot = new BranchGroup();
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 10000.0);
//bounds.setRadius(100.0);
Background bg = new Background();
bg.setApplicationBounds(bounds);
bg.setCapability(Background.ALLOW_IMAGE_WRITE);
bg.setImage(new ImageComponent2D(ImageComponent.FORMAT_RGB, image));
objRoot.addChild(bg);

//「枝」に座標変換クラスを登録
group1.addChild(transform_group1);

//仮想空間に「枝」を登録(これは最後に・・・!)
universe.addBranchGraph(group1);
universe.addBranchGraph(objRoot);

//回転数をリセット
rot_value=0.0f;


//======================================================================
//視点について設定
//======================================================================

//視点についてのハードウェア情報を取得。  
ViewingPlatform vp = universe.getViewingPlatform();

//視点のための座標変換クラスを用意
TransformGroup Camera = vp.getViewPlatformTransform();

//カメラの位置ベクトル
Transform3D view_pos = new Transform3D();

//カメラの位置を決める
Vector3f pos_vec = new Vector3f(1.4f,1.4f,1.4f);

//カメラの位置について、座標変換実行
view_pos.setTranslation(pos_vec);

//カメラの向きを示すベクトル
Transform3D view_dir = new Transform3D();
Transform3D view_dir2 = new Transform3D();

//カメラの向きを決める
view_dir.rotY(Math.PI/4);
view_dir2.rotX(-Math.PI/4 + 0.1f);
view_dir.mul(view_dir2);

//カメラの位置およびカメラの向きを統合 
view_pos.mul(view_dir);

//カメラの位置情報を登録
Camera.setTransform(view_pos);


//======================================================================
//回転のためのタイマーを設定
//======================================================================

//Timer timer = new Timer();
//timer.schedule(new player(),0,40);


//ウィンドウを可視化
this.setVisible(true);

setFocusable(true);

}


//==========================================================================
//画像の入力
//==========================================================================

public static BufferedImage loadImage(String fileName)
{
InputStream is = null;

try
    {
	is = new FileInputStream(fileName);
	BufferedImage img = ImageIO.read(is);
	return img;
    }
catch(IOException evn)
    {
	throw new RuntimeException(evn);
    }
finally
    {
	if(is != null)
	    try{ is.close(); }
	    catch(IOException evn){}
    }
}


//==========================================================================
//スペースキーを押したときの処理
//==========================================================================

public void keyPressed(KeyEvent e){

//長押しが終わるまでキー入力を無効にする
if(hasBeenReleased){
    hasBeenReleased = false;

    //スペースキーの検知
    if(e.getKeyCode()==e.VK_SPACE){

	//内部クラス"player"のメソッド"jump()"を呼び出す
	player play = new player();
	play.jump();
	
    }
}
repaint();
}

public void keyReleased(KeyEvent e){
//長押しが終わったらキー入力を有効にする
hasBeenReleased = true;
}

public void keyTyped(KeyEvent e){
}


//==========================================================================
//内部クラスとしてジャンプの描画を記述
//==========================================================================

class player
{
public void jump()
{
	//ジャンプの描画
	for (double i = 1; i <= 14; i++){

	    /*
	    //回転角を増やす
	    rot_value+=Math.PI/10;

	    //回転の座標変換実行
	    transform1.rotY(rot_value);
	    */

	    //objectのy座標を計算(単純な放物線 y = -(x - 0.7)^2 + 0.49 )
	    distance = -Math.pow((i/10-0.7),2)+0.49;
    
	    //objectの平行移動
	    transform1.set(new Vector3d(0.0, distance, 0.0));
	    
	    //座標変換を登録
	    transform_group1.setTransform(transform1);

	    /*
	    //1回転したら、回転角をリセットしておく
	    if(rot_value>Math.PI*2)
		{
		    rot_value=0.0f;
		}
	    */

	    //描画感覚の設定
	    try{
		Thread.sleep(1000 / 20);
	    } catch (InterruptedException except){}
	    
	}	
}
}


//==========================================================================
//内部クラスとしてタイマー割込みを記述

//サンプルプログラムの名残。ジャンプとは無関係だが一応残しておく

/*
class player extends TimerTask
{
boolean endFlg = false;

public void setEnd(){
    endFlg = true;
}

public void run()
{
    
    //回転角を増やす
    rot_value+=Math.PI/30;

    //回転の座標変換実行
    transform1.rotY(rot_value);

    //座標変換を登録
    transform_group1.setTransform(transform1);

    //1回転したら、回転角をリセットしておく
    if(rot_value>Math.PI*2)
	{
	    rot_value=0.0f;
	    this.setEnd();
	}

}
}
*/

}

//==============================================================================

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants