(JBoss)Pengenalan Web Mobile HTML 5 JB

jboss developer

Setelah banyak berbincang-bincang di post sebelumnya, Web Mobile banyak sekali ke untungannya, tidak hanya Jboss saja yang dapat di gunakan, kenapa ane menggunakan Jboss untuk mengembangkan sebuah web Mobile, karena Dengan JBoss Kita dapat menggunakan Java Programming kita sebagai Controlnya. Jboss Juga didukung oleh pihak Red Hat, dimana Red Hat merupakan Distro Linux yang Comersial dan memiliki security yang dapat di bilang luarbiasa.

Download JBoss Developer Studio di sini https://devstudio.jboss.com/download/6.x.html

Pasang JBoss Developer Studio

Karena file yang di download adalah .jar, maka sama untuk mengeksekusinya tinggal

java -jar namafile.java

Setelah pemasangan langsung buka JBoss Studio

Pasang Server JBoss

banyak alternatif untuk mengistall server JBoss, bisa langsung download lewat eclipse atau Download di sini http://www.jboss.org/jbossas

Create Project HTML 5 Project

Run Project

Screenshot - 06292013 - 09:48:21 AM

(JBoss) Banyak Pilihan untuk membuat aplikasi Web Mobile

Salam Super….

Web Merupakan suatu bahasa pemograman yang berjalan di atas browser, bahasa yang dapat di gunakan yaitu HTML, HTML5, PHP, Java Script, ASP, ASPX. banyak pendukung untuk membuat sebuah tampilan Web yang menarik dengan menggunakan CSS dan sebagainya, Web dapat di kategorikan bahasa pemogram dan juga bukan, seperti HTML. banyak pengembangan yang di lakukan untuk dunia web, seperti Web Mobile dan App Web, Karena banyak keuntungan membuat sebuah aplikasi berbasis web, seperti aplikasi dapat berjalan di semua sistem operasi(Multi Platform), aplikasi berjalan dengan ringan, itu terserah agan mendefenisikannya, karena pernyataan semua orang dan argument semua orang berbeda.

Web Mobile merupakan aplikasi yang di kembangkan menggunakan bahasa pemograman web, seperti HTML5, Java Script dan sebagainya, Web Mobile menurut ane sama konsep nya dengan Web Desktop atau pun Desain web, yang hanya membedakannya dia berjalan di atas Mobile dan Device yang berbeda, tapi kalo menurut ane hanya perbedaan di layar, dalam beberapa Framework yang diciptakan semuanya sama menggunakan bahasa web yang biasanya, setelah ane obrak – abrikk itu Framework ternyata mereka hanya menggunakan pertanyaan layar, dengan contoh..

if(layarResolusi 100px X 400 Px = benar){
Jalankan fungsi mobile
}else{
Jalankan fungsi desktop
}

Itu sama dengan membuat 2 fungsi untuk destop dan mobile. jangan berkecil hati untuk membuat semua itu, karena kita sudah di mudahkan adanya Mobile Framework, sehingga kita tidak lagi membuat Model yang akan di gunakan di resolusi seberapa banyak di dunia ini.

Macam – Macam Framework Web Mobile :

– Kendo UI Framework
– XHMLD UI Framework
– Sencha Touch Framework
– Tizen SDK
– AngleGrap Framework
– JBoss Framework

dengan banyak nya framework web mobile kita akan membahas JBoss web Framework, karena banyak pengguanaan JBoss ini di app desktop, banyak keuntungan untuk membuat app dengan Framework ini, terutama dapat terintegrasi dengan Bahasa Java.

Agan dapat mencari informasi Jboss Disini
https://devstudio.jboss.com/download/6.x.html

(JavaFX)Pallate for JavaFX (Scene Builder)

Salam semangat, wah wah gak jauh beda dengan kesemangatan yang di berikan. hari ini ane full di depan laptop karena ane gak ada jadwal di kampus jadi ane sempatkan untuk menambah referensi, karena ilmu itu nyata dan tak ada batasnya, semua yang ada di dunia ini tidak akan pernah merasa ilmu itu cukup, apa lagi kita yang mengambil bidang di dunia yang tidak nyata, mari sempatkan lah untuk bermain dengan dunia yang tidak nyata sepuas puas agan.

Tampilan di java sebenarnya banyak yang mengembangkan, dari beberapa macam itu menurut ane gak ada yang sesempurna, karena tampilan yang baik itu memberikan tampilan yang dapat mengubah usernya, dalam keadaan duka maka mereka akan menjadi ceria, Tampilan Swing,AWT dan JavaFX, nah kali ini kita akan membahas tampilan javaFX, karena menurut ane tampilan yang di berikan oleh javaFX lebih menarik dan simple. banyak yang mengeluh katanya membuat tampilan di javaFX secara code, ternyata tidak. ada Pallate yang di gunakan untuk memudahkan membuat sebuah tampilan. Scene Builder nah langsung aja agan download link di bawah ini.

Screenshot - 06242013 - 03:53:48 PM

http://www.oracle.com/technetwork/java/javafx/overview/index.html

Terus install seperti biasa

(JavaEE)Hibernate Validator _ Membuat Validasi pada sebuah entitas

Salam semangat, sudah lama kita tidak bersue(berjumpa)di blog ini, ane lagi banyak buanget kesibukan dengan kuliah dan tugas, tapi ane selalu menyempatkan kan untuk mencari sesuatu yang baru untuk di pahami dan di pelajari, satu minggu ane di gembleng dengan tugas dan tugas itu ane kerjakan dengan teman teman yang bukan satu kelompok, tapi tidak salah nya kalo kita membagi apa yang kita bisa. saya ingatkan kepada semua agan-agan agar membagi ilmunya kepada yang membutuhkan, karena ilmu kalo tidak di bagi maka ilmu itu akan hilang dengan bagaimananya.

Hibernate Validator 5.x is the reference implementation for JSR 349 – Bean Validation 1.1 of which Red Hat is the specification lead.

JSR 349 – Bean Validation defines a metadata model and API for JavaBean validation as well as method validation. The default metadata source are annotations, with the ability to override and extend the meta-data through the use of XML validation descriptors. The API is not tied to a specific application tier or programming model. It is specifically not tied to either the web tier or the persistence tier, and is available for both server-side application programming, as well as rich client Swing application developer.

Together with the reference implementation, Hibernate provides also the Bean Validation TCK. You can find more information about the TCK here.

For more information regarding the specification itself refer to beanvalidation.org.

All artifacts described here, namely Hibernate Validator 5 as well as Bean Validation API and TCK are provided and distributed by JBoss (Red Hat) under the Apache Software License 2.0.http://www.hibernate.org/subprojects/validator.html

Jadi kalo menurut ane, hibernate validator merupakan framework yang dibuat untuk kemudahan dalam membuat validasi dengan entitas yang di tentukan, banyak sekali bentuk yang di buat oleh team hibernate validator seperti validasi email, pass, ukuran dan sebagainya, agan bisa ke http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html untuk memahami itu semua.

Example hibernate Validator pada entitas

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hibernate2.entitas;

import javax.persistence.Version;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;


/**
 *
 * @author aerdy
 */
public class Person {
     private int id;
    private String nama;
    private String penyakit;
    private String alamat;

    public Person() {
    }
    @NotNull
    @Size(min = 1,max = 20)
    public String getAlamat() {
        return alamat;
    }
   
    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getPenyakit() {
        return penyakit;
    }

    public void setPenyakit(String penyakit) {
        this.penyakit = penyakit;
    }
}

(Java)ASCII Seni Desain Annabe dengan java AWT

Kode Standar Amerika untuk Pertukaran Informasi atau ASCII (American Standard Code for Information Interchange) merupakan suatu standar internasional dalam kode huruf dan simbol seperti Hex dan Unicode tetapi ASCII lebih bersifat universal, contohnya 124 adalah untuk karakter “|”. Ia selalu digunakan oleh komputer dan alat komunikasi lain untuk menunjukkan teks. Kode ASCII sebenarnya memiliki komposisi bilangan biner sebanyak 7 bit. Namun, ASCII disimpan sebagai sandi 8 bit dengan menambakan satu angka 0 sebagai bit significant paling tinggi. Bit tambahan ini sering digunakan untuk uji prioritas. Karakter control pada ASCII dibedakan menjadi 5 kelompok sesuai dengan penggunaan yaitu berturut-turut meliputi logical communication, Device control, Information separator, Code extention, dan physical communication. Code ASCII ini banyak dijumpai pada papan ketik (keyboard) computer atau instrument-instrument digital.
Jumlah kode ASCII adalah 255 kode. Kode ASCII 0..127 merupakan kode ASCII untuk manipulasi teks; sedangkan kode ASCII 128..255 merupakan kode ASCII untuk manipulasi grafik. Kode ASCII sendiri dapat dikelompokkan lagi kedalam beberapa bagian:
Kode yang tidak terlihat simbolnya seperti Kode 10(Line Feed), 13(Carriage Return), 8(Tab), 32(Space)
Kode yang terlihat simbolnya seperti abjad (A..Z), numerik (0..9), karakter khusus (~!@#$%^&*()_+?:”{})
Kode yang tidak ada di keyboard namun dapat ditampilkan. Kode ini umumnya untuk kode-kode grafik.
Dalam pengkodean kode ASCII memanfaatkan 8 bit. Pada saat ini kode ASCII telah tergantikan oleh kode UNICODE (Universal Code). UNICODE dalam pengkodeannya memanfaatkan 16 bit sehingga memungkinkan untuk menyimpan kode-kode lainnya seperti kode bahasa Jepang, Cina, Thailand dan sebagainya.
Pada papan keyboard, aktifkan numlock (tidak terdapat pada laptop), tekan tombol ALT secara bersamaan dengan kode karakter maka akan dihasilkan karakter tertentu. Misalnya: ALT + 44 maka akan muncul karakter koma (,). Mengetahui kode-kode ASCII sangat bermanfaat misalnya untuk membuat karakter-karakter tertentu yang tidak ada di keyboard.(http://id.wikipedia.org/wiki/ASCII)

Kalo menurut ane ASCII merupakan grafik yang beberbentuk text dengan semacam terminal yang dibuat menggunakan text dengan tampilan yang menarik, disini ane cuma membuat tampilan ASCII dengan nama yang kita inginkan. banyak teknik yang dapat digunakan yaitu hanya menggunakan teknik 2D dan library yang sudah ada, disini ane mengguakan AWT sebagai bentuk untuk membuat tampilan nama.

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package asciiexample;

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 *
 * @author victor
 */
public class ASCIIExample {

   public static void main(String[] args) throws IOException {
 
	int width = 200;//lebar yang  di inginkan
	int height = 30;//tinggi yang di inginkan
 
        //BufferedImage image = ImageIO.read(new File("/home/victor/Desktop/logo.jpg"));
	BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
	Graphics g = image.getGraphics();
	g.setFont(new Font("SansSerif", Font.BOLD, 24));
 
	Graphics2D graphics = (Graphics2D) g;
	graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
				RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
	graphics.drawString("ANNABE", 10, 20);//nama yang diinginkan
 
	//save this image
	ImageIO.write(image, "png", new File("/home/victor/ascii-art.png"));
 
	for (int y = 0; y < height; y++) {
		StringBuilder sb = new StringBuilder();
		for (int x = 0; x < width; x++) {
 
			sb.append(image.getRGB(x, y) == -16777216 ? " " : "A");
 
		}
 
		if (sb.toString().trim().isEmpty()) {
			continue;
		}
 
		System.out.println(sb);
	}
 
  }
 
}

Screenshot - 06232013 - 10:38:23 AM

(Java)Membuat dinding dan lantai model adegan _ Jmonkey

diding
Perjalanan jauh dan makin jauh hingga ke ujung dunia mari kita hampiri,Tutorial kali ini menunjukkan bagaimana agan memuat model adegan dan memberikan dinding solid dan lantai untuk karakter untuk berjalan-jalan. agan menggunakan RigidBodyControl untuk adegan collidable statis, dan CharacterControl untuk ponsel karakter user. agan juga belajar bagaimana mengatur default kamera user untuk bekerja dengan navigasi fisika dikendalikan. agan dapat menggunakan solusi yang ditampilkan di sini untuk penembak orang pertama, labirin, dan permainan serupa. dari beberapa code di bawah ini, banyak sekali implementasi fisiki dan matematika yang kita mainkan, karena pada saat peletakan dinding dan lantai harus sesuai.

FIle yang di butuhkan town.zip dapat di download Sini

Create Project dengan nama HelloCollision dan ketikkan program di bawah ini:

package mygame;

import com.jme3.app.SimpleApplication;
import com.jme3.asset.plugins.ZipLocator;
import com.jme3.bullet.BulletAppState;
import com.jme3.bullet.collision.shapes.CapsuleCollisionShape;
import com.jme3.bullet.collision.shapes.CollisionShape;
import com.jme3.bullet.control.CharacterControl;
import com.jme3.bullet.control.RigidBodyControl;
import com.jme3.bullet.util.CollisionShapeFactory;
import com.jme3.input.KeyInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.light.AmbientLight;
import com.jme3.light.DirectionalLight;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;

/**
 * test
 * @author Victor Annabe
 */
public class Main extends SimpleApplication implements ActionListener{

    private Spatial sceneModel;
  private BulletAppState bulletAppState;
  private RigidBodyControl landscape;
  private CharacterControl player;
  private Vector3f walkDirection = new Vector3f();
  private boolean left = false, right = false, up = false, down = false;
 
  public static void main(String[] args) {
    Main app = new Main();
    app.start();
  }
 
  public void simpleInitApp() {
    bulletAppState = new BulletAppState();
    stateManager.attach(bulletAppState);
   
    viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f));
    flyCam.setMoveSpeed(100);
    setUpKeys();
    setUpLight();
 
    assetManager.registerLocator("G:/town.zip", ZipLocator.class);
    sceneModel = assetManager.loadModel("main.scene");
    sceneModel.setLocalScale(2f);
 
    CollisionShape sceneShape =
            CollisionShapeFactory.createMeshShape((Node) sceneModel);
    landscape = new RigidBodyControl(sceneShape, 0);
    sceneModel.addControl(landscape);
 
    CapsuleCollisionShape capsuleShape = new CapsuleCollisionShape(1.5f, 6f, 1);
    player = new CharacterControl(capsuleShape, 0.05f);
    player.setJumpSpeed(20);
    player.setFallSpeed(30);
    player.setGravity(30);
    player.setPhysicsLocation(new Vector3f(0, 10, 0));
 
    rootNode.attachChild(sceneModel);
    bulletAppState.getPhysicsSpace().add(landscape);
    bulletAppState.getPhysicsSpace().add(player);
  }
 
  private void setUpLight() {
    AmbientLight al = new AmbientLight();
    al.setColor(ColorRGBA.White.mult(1.3f));
    rootNode.addLight(al);
 
    DirectionalLight dl = new DirectionalLight();
    dl.setColor(ColorRGBA.White);
    dl.setDirection(new Vector3f(2.8f, -2.8f, -2.8f).normalizeLocal());
    rootNode.addLight(dl);
  }
 
  private void setUpKeys() {
    inputManager.addMapping("Left", new KeyTrigger(KeyInput.KEY_A));
    inputManager.addMapping("Right", new KeyTrigger(KeyInput.KEY_D));
    inputManager.addMapping("Up", new KeyTrigger(KeyInput.KEY_W));
    inputManager.addMapping("Down", new KeyTrigger(KeyInput.KEY_S));
    inputManager.addMapping("Jump", new KeyTrigger(KeyInput.KEY_SPACE));
    inputManager.addListener(this, "Left");
    inputManager.addListener(this, "Right");
    inputManager.addListener(this, "Up");
    inputManager.addListener(this, "Down");
    inputManager.addListener(this, "Jump");
  }
 
  public void onAction(String binding, boolean value, float tpf) {
    if (binding.equals("Left")) {
      left = value;
    } else if (binding.equals("Right")) {
      right = value;
    } else if (binding.equals("Up")) {
      up = value;
    } else if (binding.equals("Down")) {
      down = value;
    } else if (binding.equals("Jump")) {
      player.jump();
    }
  }
 
  @Override
  public void simpleUpdate(float tpf) {
    Vector3f camDir = cam.getDirection().clone().multLocal(0.6f);
    Vector3f camLeft = cam.getLeft().clone().multLocal(0.4f);
    walkDirection.set(0, 0, 0);
    if (left)  { walkDirection.addLocal(camLeft); }
    if (right) { walkDirection.addLocal(camLeft.negate()); }
    if (up)    { walkDirection.addLocal(camDir); }
    if (down)  { walkDirection.addLocal(camDir.negate()); }
    player.setWalkDirection(walkDirection);
    cam.setLocation(player.getPhysicsLocation());
  }
}
 

Penjelasan

 public class Main extends SimpleApplication implements ActionListener{

bahwa dalam class main kita menurunkan sifat SimpleApplication karena ini merupakan class dasar untuk semua jME3 dan kita menginterface kan ActionListener agar membuat inputan navigasi
  private Spatial sceneModel;
  private BulletAppState bulletAppState;
  private RigidBodyControl landscape;
  private CharacterControl player;
  private Vector3f walkDirection = new Vector3f();
  private boolean left = false, right = false, up = false, down = false;

Mendeklarasikan berbagai bidang :

- TBulletAppState memberikan ini akses ke fitur SimpleApplication fisika (seperti deteksi tabrakan) yang disediakan oleh integrasi jBullet jME3 ini
- Tata Ruang sceneModel adalah untuk memuat model OgreXML dari kota.
- RigidBodyControl untuk membuat model kota padat.
- The (invisible) orang pertama pemain diwakili oleh objek CharacterControl.
- Bidang walkDirection dan empat Booleans digunakan untuk navigasi fisika dikendalikan.
  viewPort.setBackgroundColor(new ColorRGBA(0.7f,0.8f,1f,1f));
    flyCam.setMoveSpeed(100);
    setUpKeys();
    setUpLight();

- mengatur warna latar belakang sampai biru, karena ini adalah sebuah adegan dengan langit.
- repurpose default kamera kontrol "flyCam" sebagai kamera pertama-orang dan mengatur kecepatan.
- Method setUpLights tambahan () menambahkan sumber cahaya Anda.
- Method setUpKeys tambahan () mengkonfigurasi masukan pemetaan.
    bulletAppState = new BulletAppState();
    stateManager.attach(bulletAppState);

    assetManager.registerLocator("town.zip", ZipLocator.class);
    sceneModel = assetManager.loadModel("main.scene");
    sceneModel.setLocalScale(2f);

assetManager.registerLocator merupakan tempat dimana kita akan meload data model yang akan di masukkan ke bidang kanvas.

   CollisionShape sceneShape = CollisionShapeFactory.createMeshShape((Node) sceneModel);
    landscape = new RigidBodyControl(sceneShape, 0);
    sceneModel.addControl(landscape);
    rootNode.attachChild(sceneModel);

Untuk menggunakan deteksi kesesuaian, agan menambahkan RigidBodyControl kepada sceneModel Ruang. The RigidBodyControl untuk model yang kompleks membutuhkan dua argumen: Sebuah Bentuk kesesuaian, dan massa benda.

JME3 menawarkan CollisionShapeFactory yang precalculates tabrakan bentuk mesh akurat untuk Ruang. agan memilih untuk menghasilkan CompoundCollisionShape (yang memiliki MeshCollisionShapes sebagai anak-anaknya) karena jenis ini berbentuk tabrakan yang optimal untuk objek bergerak, seperti medan, rumah, dan tingkat penembak utuh.
agan menetapkan massa ke nol karena adegan statis dan massanya adalah irrevelant.
Tambahkan kontrol ke Spasial untuk memberikan sifat fisik.
Seperti biasa, pasang sceneModel untuk rootNode untuk membuatnya terlihat.
Tip: Jangan lupa untuk menambahkan sumber cahaya sehingga agan dapat melihat adegan.
 private void setUpKeys() {
    inputManager.addMapping("Left", new KeyTrigger(KeyInput.KEY_A));
    inputManager.addMapping("Right", new KeyTrigger(KeyInput.KEY_D));
    inputManager.addMapping("Up", new KeyTrigger(KeyInput.KEY_W));
    inputManager.addMapping("Down", new KeyTrigger(KeyInput.KEY_S));
    inputManager.addMapping("Jump", new KeyTrigger(KeyInput.KEY_SPACE));
    inputManager.addListener(this, "Left");
    inputManager.addListener(this, "Right");
    inputManager.addListener(this, "Up");
    inputManager.addListener(this, "Down");
    inputManager.addListener(this, "Jump");
  }

model digunakan untuk menginputkan aktifitas gerak yang digunakan dalam sebuah game biasanya, aktifitas mouse dan keyboard sebagai default input system.

dan untuk code di bawahnya sudah saya jelaskan di postingan sebelumnya mengenai inputsystem dan sebagainya, sehingga jika agan belum membaca postingan sebelumnya silakan datang ke postingan sebelumnya. Terima kasih

(Java)Membuat Animasi Gerak pada object_JMonkey Engine

Banyak orang untuk bermimpi dan mimpi itu terkadang mengherankan, ada yang mimpi memiliki istri cantik, ada yang bermimpi memiliki rumah mewah dan ada yang bermimpi menjadi seorang poligami. mimpi wajib ada di setiap orang dan semua orang, terus apa yang harus agan lakukan, agar mimpi itu terwujud?. di pagi hari ane banyak melihat update status tmen ane di jejaring sosial..tiiitttttt(sensor). semua itu bertema tentang mimpi mereka, ane sampe ketawa sendiri membaca semua itu, ya kalo di bilang anak gaul, itulah mimpi ane terus apa mimpi loe.

pagi yang cerah dan jiwa yang bersih, kita akan memulai bermain animasi gerak pada object, oh ya sebelumnya mungkin agan heran, ane selalu update postingan setiap hari, terkadang 2 postingan dan terkadang lebih, itu lah mimpi ane, karena ane yakin dengan kerja keras dan doa dari orang tua, isya allah semua itu akan berjalan dengan baik, sebnarnya konspe animasi gerak ini di lakukan dengan 2 objek, yang satu file animasi yang di buat di engine agan dan yang satu file kontrol yang di buat di atas code java, dan semua itu mutlak harus bersinkronisasi. mari kode di bawah ini, dan langsung di praktekkan di kanvas agan.

oh ya sebelumnya silakan download animasi engine berekstesi XML DiSini.

Masukka 2 file xml tersebut dalam aseet- model

animationpackage

Buka file class main.java dan tuliskan code di bawah ini :

 package mygame;

import com.jme3.animation.AnimChannel;
import com.jme3.animation.AnimControl;
import com.jme3.animation.AnimEventListener;
import com.jme3.animation.LoopMode;
import com.jme3.app.SimpleApplication;
import com.jme3.input.KeyInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.light.DirectionalLight;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.Node;

/**
 * test
 * @author normenhansen
 */
public class Main extends SimpleApplication implements AnimEventListener {
  private AnimChannel channel;
  private AnimControl control;
  Node player;
  public static void main(String[] args) {
    Main app = new Main();
    app.start();
  }
 
  @Override
  public void simpleInitApp() {
    viewPort.setBackgroundColor(ColorRGBA.Green);
    initKeys();
    DirectionalLight dl = new DirectionalLight();
    dl.setDirection(new Vector3f(-0.1f, -1f, -1).normalizeLocal());
    rootNode.addLight(dl);
    player = (Node) assetManager.loadModel("Models/oto.mesh.xml");
    player.setLocalScale(0.5f);
    rootNode.attachChild(player);
    control = player.getControl(AnimControl.class);
    control.addListener(this);
    channel = control.createChannel();
    channel.setAnim("stand");
  }
 
  public void onAnimCycleDone(AnimControl control, AnimChannel channel, String animName) {
    if (animName.equals("Walk")) {
      channel.setAnim("stand", 0.50f);
      channel.setLoopMode(LoopMode.DontLoop);
      channel.setSpeed(1f);
    }
  }
 
  public void onAnimChange(AnimControl control, AnimChannel channel, String animName) {
    // unused
  }
 
  /** Custom Keybinding: Map named actions to inputs. */
  private void initKeys() {
    inputManager.addMapping("Walk", new KeyTrigger(KeyInput.KEY_SPACE));
    inputManager.addListener(actionListener, "Walk");
  }
  private ActionListener actionListener = new ActionListener() {
    public void onAction(String name, boolean keyPressed, float tpf) {
      if (name.equals("Walk") && !keyPressed) {
        if (!channel.getAnimationName().equals("Walk")) {
          channel.setAnim("Walk", 0.50f);
          channel.setLoopMode(LoopMode.Loop);
        }
      }
    }
  };
    @Override
    public void simpleUpdate(float tpf) {
        //TODO: add update code
    }

    @Override
    public void simpleRender(RenderManager rm) {
        //TODO: add render code
    }
}

/*
 Animasi Pemicu Setelah User Input

Ada animasi ambien seperti binatang atau pohon yang Anda mungkin ingin untuk memicu di loop acara utama. Dalam kasus lain, animasi yang dipicu oleh interaksi pengguna, seperti input kunci. Anda ingin memainkan animasi berjalan ketika pemain menekan tombol tertentu (di sini spasi), pada saat yang sama seperti avatar melakukan tindakan berjalan dan perubahan lokasi.

Menginisialisasi pengontrol input baru (di simpleInitApp ()).
Tuliskan metode convenience initKey () dan menyebutnya dari simpleInitApp ().
Tambahkan pemetaan kunci dengan nama sebagai tindakan yang ingin Anda memicu.
Berikut misalnya, Anda memetakan Berjalan ke tombol Spacebar.
Tambahkan pendengar masukan untuk tindakan Walk.
   initKeys private void () {
     inputManager.addMapping ("Berjalan", KeyTrigger baru (KeyInput.KEY_SPACE));
     inputManager.addListener (ActionListener, "berjalan");
   }
 */


/*
Exercises

Exercise 1: Two Animations

Make a mouse click trigger another animation sequence!

Create a second channel in the controller
Create a new key trigger mapping and action (see: Hello Input)
Tip: Do you want to find out what animation sequences are available in the model? Use:
for (String anim : control.getAnimationNames()) { System.out.println(anim); }
Exercise 2: Revealing the Skeleton (1)

Open the skeleton.xml file in a text editor of your choice. You don't have to be able to read or write these xml files (Blender does that for you) – but it is good to know how skeletons work. "There's no magic to it!"

Note how the bones are numbered and named. All names of animated models follow a naming scheme.
Note the bone hierarchy that specifies how the bones are connected.
Note the list of animations: Each animation has a name, and several tracks. Each track tells individual bones how and when to transform. These animation steps are called keyframes.
Exercise 3: Revealing the Skeleton (2)

Add the following import statements for the SkeletonDebugger and Material classes:

     import com
 */

Run

HelloAnimation

Animasi Pemicu Setelah User Input

/*

Ada animasi ambien seperti binatang atau pohon yang Anda mungkin ingin untuk memicu di loop acara utama. Dalam kasus lain, animasi yang dipicu oleh interaksi pengguna, seperti input kunci. Anda ingin memainkan animasi berjalan ketika pemain menekan tombol tertentu (di sini spasi), pada saat yang sama seperti avatar melakukan tindakan berjalan dan perubahan lokasi.

Menginisialisasi pengontrol input baru (di simpleInitApp ()).
Tuliskan metode convenience initKey () dan menyebutnya dari simpleInitApp ().
Tambahkan pemetaan kunci dengan nama sebagai tindakan yang ingin Anda memicu.
Berikut misalnya, Anda memetakan Berjalan ke tombol Spacebar.
Tambahkan pendengar masukan untuk tindakan Walk.
   initKeys private void () {
     inputManager.addMapping (“Berjalan”, KeyTrigger baru (KeyInput.KEY_SPACE));
     inputManager.addListener (ActionListener, “berjalan”);
   }

Exercises

Exercise 1: Two Animations

Make a mouse click trigger another animation sequence!

Create a second channel in the controller
Create a new key trigger mapping and action (see: Hello Input)
Tip: Do you want to find out what animation sequences are available in the model? Use:
for (String anim : control.getAnimationNames()) { System.out.println(anim); }
Exercise 2: Revealing the Skeleton (1)

Open the skeleton.xml file in a text editor of your choice. You don’t have to be able to read or write these xml files (Blender does that for you) – but it is good to know how skeletons work. “There’s no magic to it!”

Note how the bones are numbered and named. All names of animated models follow a naming scheme.
Note the bone hierarchy that specifies how the bones are connected.
Note the list of animations: Each animation has a name, and several tracks. Each track tells individual bones how and when to transform. These animation steps are called keyframes.
Exercise 3: Revealing the Skeleton (2)

Add the following import statements for the SkeletonDebugger and Material classes:

import com