Giter Site home page Giter Site logo

Comments (8)

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

from jone9.

mgk797 avatar mgk797 commented on July 28, 2024

なんとかスペースキー検知はできた...
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();
}

}


from jone9.

h-otter avatar h-otter commented on July 28, 2024

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

from jone9.

mgk797 avatar mgk797 commented on July 28, 2024

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){
}

}

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


from jone9.

mgk797 avatar mgk797 commented on July 28, 2024

ちょっと修正
(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){
}
}
//==================================================================


from jone9.

mgk797 avatar mgk797 commented on July 28, 2024

ジャンプはできました

現在確認できている問題点
・キー長押しによる連続入力は無効にできたが、キー連打による連続入力はまだ有効
 (つまり、ジャンプ中にスペースキーを押すと、推した回数だけ連続ジャンプしてしまう)
・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();
	}

}
}
*/

}

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


from jone9.

h-otter avatar h-otter commented on July 28, 2024

お疲れ様でした! 🙇

from jone9.

mgk797 avatar mgk797 commented on July 28, 2024

//******************************************************************************
//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();
	}

}
}
*/

}

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

from jone9.

Related Issues (12)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.