2016-07-27 8 views
3

私のプログラムを特定のFPSに限定したいのですが、そうでなければ1台のコンピュータで高速に実行され、もう1台では遅くなるかもしれません。 FPSClock = pygame.time.Clock() FPSClock.tick(30)Java 3DでカスタムFPSを設定する方法

は、Java 3Dでこのようなものがあります -

私はpygameのダウンロードで、私がやるような何かをしたいですか? 私はJava 3Dの初心者です。スキルを向上させるためにPongゲームを作成しようとしました。しかし、私は立ち往生して、最後のフレームの時間は何だったのか分からないので、javaの適切な遅延の方法がないことに気づいた。

KeyEventが自分のコードで動作していないことも発見しました。 私のコードは、これまで -

import com.sun.j3d.utils.universe.*; 
import com.sun.j3d.utils.geometry.*; 
import javax.media.j3d.*; 
import javax.vecmath.*; 
import java.awt.event.*; 
import java.awt.event.KeyListener.*; 
import java.awt.event.WindowAdapter; 
import java.awt.*; 
import java.applet.Applet; 
public class Pong implements KeyListener { 
    static float ballx = 0.0f; 
    static float bally = 0.0f; 
    static float ballz = 0.0f; 
    static Transform3D transform2 = new Transform3D(); 
    static TransformGroup transformGroup2 = new TransformGroup(); 
    public static void main(String[] args) { 
     SimpleUniverse universe = new SimpleUniverse(); 
     BranchGroup group = new BranchGroup(); 
     Appearance appearance = new Appearance(); 
     Color3f color = new Color3f(0.1f, 1.8f, 0.1f); 
     ColoringAttributes coloringAttributes = new ColoringAttributes(color, ColoringAttributes.NICEST); 
     appearance.setColoringAttributes(coloringAttributes); 
     Box box = new Box(0.05f, 0.2f, 0.03f, appearance); 
     Transform3D transform = new Transform3D(); 
     TransformGroup transformGroup = new TransformGroup(); 
     transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); 
     Vector3f vector = new Vector3f(-0.9f, 0.0f, 0.0f); 
     transform.setTranslation(vector); 
     transformGroup.setTransform(transform); 
     transformGroup.addChild(box); 
     Box box1 = new Box(0.05f, 0.2f, 0.03f, appearance); 
     Transform3D transform1 = new Transform3D(); 
     TransformGroup transformGroup1 = new TransformGroup(); 
     transformGroup1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); 
     Vector3f vector1 = new Vector3f(0.9f, 0.0f, 0.0f); 
     transform1.setTranslation(vector1); 
     transformGroup1.setTransform(transform1); 
     transformGroup1.addChild(box1); 
     group.addChild(transformGroup); 
     Sphere sphere = new Sphere(0.1f); 
     group.addChild(transformGroup1); 
     Vector3f vector2 = new Vector3f(0.0f,0.0f,0.0f); 
     transform2.setTranslation(vector2); 
     transformGroup2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); 
     transformGroup2.setTransform(transform2); 
     transformGroup2.addChild(sphere); 
     Color3f lightColor = new Color3f(1.8f, 1.9f, 0.1f); 
     BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); 
     Vector3f lightDirection = new Vector3f(4.0f, -7.0f, -12.0f); 
     DirectionalLight light = new DirectionalLight(lightColor, lightDirection); 
     light.setInfluencingBounds(bounds); 
     transformGroup2.addChild(light); 
     group.addChild(transformGroup2); 
     Color3f ambientColor = new Color3f(1.0f, 1.0f, 1.0f); 
     AmbientLight ambientLightNode = new AmbientLight(ambientColor); 
     ambientLightNode.setInfluencingBounds(bounds); 
     transformGroup2.addChild(ambientLightNode); 
     universe.getViewingPlatform().setNominalViewingTransform(); 
     universe.addBranchGraph(group); 
    } 
    public void keyPressed(KeyEvent event) { 
     if (event.getKeyChar() == 'a') { 
      ballx = ballx 0.1f; 
      transform2.setTranslation(new Vector3f(ballx, bally, ballz)); 
      transformGroup2.setTransform(transform2); 
     } 
    } 
    public void keyReleased(KeyEvent event) { 

    } 
    public void keyTyped(KeyEvent event) { 

    } 
} 

答えて

3

Javaは最も確かにスキルの私の領域ではない、しかし、前にJavaでゲームプログラミングを少しやってから、私はあなたがのFPSを制御するために、独自のゲームループを記述する必要があります信じていますあなたのゲーム。カスタムFPSを設定するには、ゲームループを作成する必要があります。 非常に便利な記事はhttp://www.java-gaming.org/index.php?topic=24220.0です。どのループが悪い習慣であるかを説明し、良いゲームループの例を示します。

編集:あなたのキー方法であなたの問題に対応して 、私は、彼らは常に、キーの状態を確認できるように、ゲームループのものを呼び出さなければならないことを信じています。

+3

ありがとうございました。そのリンクが私を大いに助けました。すべてのコンピュータで60 FPSを打つためのタイマーでプログラムを更新します。私はまだもう一つの問題を抱えています。私はPongクラスのKeyListenerとkeyPressed()、keyTyped()、keyReleased()メソッドを実装しました。それはどんな誤りも示していないし、それは働いている。私はこの問題への助けに感謝します – Thomas

関連する問題