Laporan Praktikum Desain Aplikasi Multimedia Dan Grafis Modul 13 "Hello Physics "

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

LAPORAN PRAKTIKUM

DESAIN APLIKASI MULTIMEDIA DAN GRAFIS


MODUL 13
Hello Physics

H. HAMID
201110370311274
4B

LABORATORIUM DMAG DAN RPL


PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH MALANG
2013

SOURCE CODE
package jme3test.helloworld;

import com.jme3.app.SimpleApplication;
import com.jme3.asset.TextureKey;
import com.jme3.bullet.BulletAppState;
import com.jme3.bullet.control.RigidBodyControl;
import com.jme3.font.BitmapText;
import com.jme3.input.MouseInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.MouseButtonTrigger;
import com.jme3.material.Material;
import com.jme3.math.Vector2f;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import com.jme3.scene.shape.Sphere;
import com.jme3.scene.shape.Sphere.TextureMode;
import com.jme3.texture.Texture;
import com.jme3.texture.Texture.WrapMode;

/**

* Example 12 - how to give objects physical properties so they bounce and fall.
* @author base code by double1984, updated by zathras
*/
public class HelloPhysics extends SimpleApplication {

public static void main(String args[]) {


HelloPhysics app = new HelloPhysics();
app.start();
}

/** Prepare the Physics Application State (jBullet) */


private BulletAppState bulletAppState;

/** Prepare Materials */


Material wall_mat;
Material stone_mat;
Material floor_mat;

/** Prepare geometries and physical nodes for bricks and cannon balls. */
private RigidBodyControl brick_phy;
private static final Box box;
private RigidBodyControl ball_phy;

private static final Sphere sphere;


private RigidBodyControl floor_phy;
private static final Box floor;

/** dimensions used for bricks and wall */


private static final float brickLength = 0.48f;
private static final float brickWidth = 0.24f;
private static final float brickHeight = 0.12f;

static {
/** Initialize the cannon ball geometry */
sphere = new Sphere(32, 32, 0.4f, true, false);
sphere.setTextureMode(TextureMode.Projected);
/** Initialize the brick geometry */
box = new Box(Vector3f.ZERO, brickLength, brickHeight, brickWidth);
box.scaleTextureCoordinates(new Vector2f(1f, .5f));
/** Initialize the floor geometry */
floor = new Box(Vector3f.ZERO, 10f, 0.1f, 5f);
floor.scaleTextureCoordinates(new Vector2f(3, 6));
}

@Override

public void simpleInitApp() {


/** Set up Physics Game */
bulletAppState = new BulletAppState();
stateManager.attach(bulletAppState);
//bulletAppState.getPhysicsSpace().enableDebug(assetManager);
/** Configure cam to look at scene */
cam.setLocation(new Vector3f(0, 4f, 6f));
cam.lookAt(new Vector3f(2, 2, 0), Vector3f.UNIT_Y);
/** Initialize the scene, materials, inputs, and physics space */
initInputs();
initMaterials();
initWall();
initFloor();
initCrossHairs();
}

/** Add InputManager action: Left click triggers shooting. */


private void initInputs() {
inputManager.addMapping("shoot",
new MouseButtonTrigger(MouseInput.BUTTON_LEFT));
inputManager.addListener(actionListener, "shoot");
}

/**
* Every time the shoot action is triggered, a new cannon ball is produced.
* The ball is set up to fly from the camera position in the camera direction.
*/
private ActionListener actionListener = new ActionListener() {
public void onAction(String name, boolean keyPressed, float tpf) {
if (name.equals("shoot") && !keyPressed) {
makeCannonBall();
}
}
};

/** Initialize the materials used in this scene. */


public void initMaterials() {
wall_mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
TextureKey key = new TextureKey("Textures/Terrain/BrickWall/BrickWall.jpg");
key.setGenerateMips(true);
Texture tex = assetManager.loadTexture(key);
wall_mat.setTexture("ColorMap", tex);

stone_mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");

TextureKey key2 = new TextureKey("Textures/Terrain/Rock/Rock.PNG");


key2.setGenerateMips(true);
Texture tex2 = assetManager.loadTexture(key2);
stone_mat.setTexture("ColorMap", tex2);

floor_mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");


TextureKey key3 = new TextureKey("Textures/Terrain/Pond/Pond.jpg");
key3.setGenerateMips(true);
Texture tex3 = assetManager.loadTexture(key3);
tex3.setWrap(WrapMode.Repeat);
floor_mat.setTexture("ColorMap", tex3);
}

/** Make a solid floor and add it to the scene. */


public void initFloor() {
Geometry floor_geo = new Geometry("Floor", floor);
floor_geo.setMaterial(floor_mat);
floor_geo.setLocalTranslation(0, -0.1f, 0);
this.rootNode.attachChild(floor_geo);
/* Make the floor physical with mass 0.0f! */
floor_phy = new RigidBodyControl(0.0f);
floor_geo.addControl(floor_phy);

bulletAppState.getPhysicsSpace().add(floor_phy);
}

/** This loop builds a wall out of individual bricks. */


public void initWall() {
float startpt = brickLength / 4;
float height = 0;
for (int j = 0; j < 15; j++) {
for (int i = 0; i < 6; i++) {
Vector3f vt =
new Vector3f(i * brickLength * 2 + startpt, brickHeight + height, 0);
makeBrick(vt);
}
startpt = -startpt;
height += 2 * brickHeight;
}
}

/** This method creates one individual physical brick. */


public void makeBrick(Vector3f loc) {
/** Create a brick geometry and attach to scene graph. */
Geometry brick_geo = new Geometry("brick", box);

brick_geo.setMaterial(wall_mat);
rootNode.attachChild(brick_geo);
/** Position the brick geometry */
brick_geo.setLocalTranslation(loc);
/** Make brick physical with a mass > 0.0f. */
brick_phy = new RigidBodyControl(2f);
/** Add physical brick to physics space. */
brick_geo.addControl(brick_phy);
bulletAppState.getPhysicsSpace().add(brick_phy);
}

/** This method creates one individual physical cannon ball.


* By defaul, the ball is accelerated and flies
* from the camera position in the camera direction.*/
public void makeCannonBall() {
/** Create a cannon ball geometry and attach to scene graph. */
Geometry ball_geo = new Geometry("cannon ball", sphere);
ball_geo.setMaterial(stone_mat);
rootNode.attachChild(ball_geo);
/** Position the cannon ball */
ball_geo.setLocalTranslation(cam.getLocation());
/** Make the ball physcial with a mass > 0.0f */

ball_phy = new RigidBodyControl(1f);


/** Add physical ball to physics space. */
ball_geo.addControl(ball_phy);
bulletAppState.getPhysicsSpace().add(ball_phy);
/** Accelerate the physcial ball to shoot it. */
ball_phy.setLinearVelocity(cam.getDirection().mult(25));
}

/** A plus sign used as crosshairs to help the player with aiming.*/
protected void initCrossHairs() {
setDisplayStatView(false);
//guiFont = assetManager.loadFont("Interface/Fonts/Default.fnt");
BitmapText ch = new BitmapText(guiFont, false);
ch.setSize(guiFont.getCharSet().getRenderedSize() * 2);
ch.setText("+");

// fake crosshairs :)

ch.setLocalTranslation( // center
settings.getWidth() / 2,
settings.getHeight() / 2, 0);
guiNode.attachChild(ch);
}
}
PRINT SCREEN OUTPUT

A. HASIL KETIKA PROGRAM DI RUN

PADA PROGRAM DI ATAS BOX AKAN MEMPUNYAI MASING GERAKAN DENGAN AKSI
MASING-MASING TOMBOL,YAITU:
A. TOMBOL D

-> BOX AKAN BERGESER KE SEBELAH KIRI

B. TOMBOL A

-> BOX AKAN BERGESER KE SEBELAH KANAN

C. TOMBOL W

-> BOX AKAN MEMPERBESAR UKURAN ATAUPUN ZOOM IN

D. TOMBOL S

-> BOX AKAN SEMAKIN KECIL ATAUPUN ZOOM OUT

UNTUK MEMBUAT TAMPILAN TEKSTUR :


ParticleEmitter fire = new ParticleEmitter("Emitter", ParticleMesh.Type.Triangle, 30);
Material mat_red = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md");
mat_red.setTexture("Texture", assetManager.loadTexture( "Effects/Explosion/flame.png"));
fire.setMaterial(mat_red);
fire.setImagesX(2);
fire.setImagesY(2);

// 2x2 texture animation fire.setEndColor( new ColorRGBA(1f, 0f, 0f, 1f)); // red
fire.setStartColor(new ColorRGBA(1f, 1f, 0f, 0.5f)); // yellow
DARI METHOD DI ATAS TERDAPAT MASING-MASING FUNGSI:
A. MEMBUAT BENTUK TEKSTUR DAN SEBAGAI TITIK ASAL TEKSTUR
B. BENTUK GEOMETRY TEKSTUR
C. SEBAGAI PEMBUAT TEKSTUR
D. MEMBUAT WARNA DAN TEKSTUR
E. MEMUNCULKAN TEKSTUR DIKOTAK DIALOG
KESIMPULAN

UNTUK MEMBUAT OBJEK DENGAN METHOD A SIMPLEINITAPP();

SEBAGAI CONTROL SUATU OBJEK

DAN SEBAGAI DASAR PEMAKAIAN OBJEK DAN FUNGSINYA

UNTUK MENGARAHKAN TEKSTUR KE SEGALA ARAH

You might also like