Programmer's Diary

Sebuah diary mahasiswa Teknik Informatika.

Posts Tagged ‘Virtual Reality’

Tutorial XNA Project Menggunakan Farseer Physic Engine

Posted by Alexander Rahardjo on April 21, 2010

Farseer Physic Engine merupakan engine fisika yang open source untuk .NET.
Pada tutorial kali ini kita akan mencoba membuat contoh implementasi dari sebuah kotak dan lingkaran. Kotak dan lingkaran tersebut dapat digerakkan dan bertabrakan satu sama lain.

Program yang diperlukan (yang digunakan dalam tutorial ini) :

–          Microsoft Visual Studio 2008 SP 1

–          XNAGS 31

Packages atau project yang dibutuhkan :

–          Farseer Physics 2.1.3 XNA

–          DemoBaseXNA

Langkah-langkah :

Buat project baru XNA Game Studio 3.1 -> Windows Game 3.1

Add Packages Farseer Physics 2.1.3 XNA & DemoBaseXNA

Add Reference Farseer Physics 2.1.3 XNA & DemoBaseXNA

Buat Class yang diturunkan dari class DemoBaseXNA.ScreenSystem.GameScreen

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DemoBaseXNA;
using DemoBaseXNA.DrawingSystem;
using DemoBaseXNA.ScreenSystem;
using FarseerGames.FarseerPhysics;
using FarseerGames.FarseerPhysics.Dynamics;
using FarseerGames.FarseerPhysics.Factories;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace WindowsGame2.Contoh1
{
    class contoh1:GameScreen
    {
        //inisialisasi awal gamescreen
        public override void Initialize()
        {
        }

        //load object, digunakan untuk load lingkaran dan kotak
        public override void LoadContent()
        {
        }

        //digunakan untuk menggambar objek ke layar
        public override void Draw(GameTime gameTime)
        {
        }

        //handle input state dari gamescreen
        public override void HandleInput(InputState input)
        {
        }

        //handle input dari keyboard
        private void HandleKeyboardInput(InputState input)
        {
        }
        //text detail saat dilayar pause
        private static string GetDetails()
        {
        }
    }
}

Inisialisasi Class GameScreen

public override void Initialize()
        {
            //inisialisasi physic simulator
            PhysicsSimulator = new PhysicsSimulator(new Vector2(0, 0));
            //add physic simulator ke view
            PhysicsSimulatorView = new hysicsSimulatorView(PhysicsSimulator);

            base.Initialize();
        }

Load objek gambar geometry yang akan diload

public override void LoadContent()
        {
            //membuat brush untuk draw lingkaran
            //radius, fill color, border color
            _circleBrush = new CircleBrush(64, Color.White, Color.Black);
            _circleBrush.Load(ScreenManager.GraphicsDevice);

            //membuat body dari lingkaran untuk simulasi gaya dan impuls
            //radius, masa
            _circleBody = BodyFactory.Instance.CreateCircleBody(PhysicsSimulator, 64, 1);
            _circleBody.Position = new Vector2(500, 384);

            //mmebuat geometri untuk deteksi tabrakan dari lingkaran
            //body, radius, jumlah edge/garis
            GeomFactory.Instance.CreateCircleGeom(PhysicsSimulator, _circleBody, 64, 20);

            //membuat body kotak untuk simulasi gaya dan impuls
            //width, height, mass
            _rectangleBody = BodyFactory.Instance.CreateRectangleBody(PhysicsSimulator, 128, 128, 1);
            _rectangleBody.Position = new Vector2(256, 384);

            //membuat geometri untuk deteksi tabrakan dari kotak
            //width, height
            GeomFactory.Instance.CreateRectangleGeom(PhysicsSimulator, _rectangleBody, 128, 128);

            //membuat brush untuk draw kotak
            //width, height, fill color, border color
            _rectangleBrush = new RectangleBrush(128, 128, Color.Gold, Color.Black);
            _rectangleBrush.Load(ScreenManager.GraphicsDevice);

            base.LoadContent();
        }

Draw brush model sesuai dengan bodynya

public override void Draw(GameTime gameTime)
        {
            //memulai proses drawing pada SpriteBatch
            ScreenManager.SpriteBatch.Begin(SpriteBlendMode.AlphaBlend);

            //menggambar brush lingkaran sesuai dengan body lingkaran
            _circleBrush.Draw(ScreenManager.SpriteBatch, _circleBody.Position);

            //menggambar brush kotak sesuai dengan body kotak
            _rectangleBrush.Draw(ScreenManager.SpriteBatch, _rectangleBody.Position, _rectangleBody.Rotation);

            //menutup SpriteBatch
            ScreenManager.SpriteBatch.End();

            base.Draw(gameTime);
        }

Mengatur handle input

public override void HandleInput(InputState input)
        {
            //jika gamescreen pertama kali dijalankan
            if (firstRun)
            {
                //tambah pause screen ke screen manager
                ScreenManager.AddScreen(new PauseScreen(GetTitle(), GetDetails()));
                firstRun = false;
            }

            //jika screen dalam keadaan pause/ berhentei sejenak
            if (input.PauseGame)
            {
                ScreenManager.AddScreen(new PauseScreen(GetTitle(), GetDetails()));
            }

            //handle input keyboard
            HandleKeyboardInput(input);
            base.HandleInput(input);
        }

        private void HandleKeyboardInput(InputState input)
        {
            //set besarnya penambahan gaya jika user menekan A/S/D/W
            const float forceAmount = 50;

            //set gaya awal sebesar 0/ diam
            Vector2 force = Vector2.Zero;

            //set Y negatif/ ke bawah
            force.Y = -force.Y;

            //user menekan tombol A
            if (input.CurrentKeyboardState.IsKeyDown(Keys.A)) { force += new Vector2(-forceAmount, 0); }
            //user menekan tombol S
            if (input.CurrentKeyboardState.IsKeyDown(Keys.S)) { force += new Vector2(0, forceAmount); }
            //user menekan tombol D
            if (input.CurrentKeyboardState.IsKeyDown(Keys.D)) { force += new Vector2(forceAmount, 0); }
            //user menekan tombol W
            if (input.CurrentKeyboardState.IsKeyDown(Keys.W)) { force += new Vector2(0, -forceAmount); }

            //berikan gaya pada body kotak
            _rectangleBody.ApplyForce(force);

            //set besarnya pertambahan torsi pada kotak
            const float torqueAmount = 1000;

            //set torsi awal menjadi 0/ tidak berputar
            float torque = 0;

            //user menekan tombol left
            if (input.CurrentKeyboardState.IsKeyDown(Keys.Left)) { torque -= torqueAmount; }
            //user menekan tombol right
            if (input.CurrentKeyboardState.IsKeyDown(Keys.Right)) { torque += torqueAmount; }
            //berikan torsi pada kotak
            _rectangleBody.ApplyTorque(torque);
        }

Set atribut lain dalam GameSreen

//judul dari GameScreen
        public static string GetTitle()
        {
            return "Contoh 1 : kotak dan lingkaran";
        }

        //Deskripsi dari GameScreen (akan dipasang di pause screen)
        private static string GetDetails()
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Contoh isi dari layar pause/menu");
            sb.AppendLine("object attached.");
            sb.AppendLine(string.Empty);
            sb.AppendLine("Keyboard:");
            sb.AppendLine("  -Rotasi : panah kanan atau kiri");
            sb.AppendLine("  -Gerak: A,S,D,W");
            sb.AppendLine(string.Empty);
            sb.AppendLine("Mouse");
            sb.AppendLine("  -Tahan mouse kiri lalu drag mouse");
            return sb.ToString();
        }

Set constructor Game, add GameScreen ke Game

public Game1()
        {
            graphics = new GraphicsDeviceManager(this);

            //set judul game
            Window.Title = "Contoh Farseer Physics Engine XNA";

            graphics.SynchronizeWithVerticalRetrace = false;

            TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 10);
            IsFixedTimeStep = true;

            //set ukuran jendela game
            graphics.PreferredBackBufferWidth = 800;
            graphics.PreferredBackBufferHeight = 600;
            graphics.IsFullScreen = false;

            //set apakah mouse di draw atau tidak
            IsMouseVisible = true;

            //Set window defaults. Parent game can override in constructor
            Window.AllowUserResizing = false;

            //new-up components and add to Game.Components
            ScreenManager screenmanager= new ScreenManager(this);
            Components.Add(screenmanager);

            //set frame counter
            FrameRateCounter frameRateCounter = new FrameRateCounter(screenmanager);
            frameRateCounter.DrawOrder = 101;
            Components.Add(frameRateCounter);

            //tambah GameScreen yang sudah Anda buat(contoh1)
            screenmanager.MainMenuScreen.AddMainMenuItem(contoh1.GetTitle(), new contoh1());
            screenmanager.MainMenuScreen.AddMainMenuItem("Keluar", null, true);

            //arahkan game ke main menu
            screenmanager.GoToMainMenu();
        }

Selesai

 

Dan berikut adalah hasil akhir dari tutorial di atas 🙂

Anda dapat men-download tutorial di atas di sini

Advertisements

Posted in Microsoft, Tutorial, Virtual Reality, XNA | Tagged: , , | Leave a Comment »

RollerCoaster Tycoon 3 Review

Posted by Alexander Rahardjo on April 7, 2010

RollerCoaster Tycoon 3 memungkinkan Anda untuk membangun taman impian Anda dan kemudian melihat tamu Anda (dikenal sebagai peeps) berjalan-jalan dan menikmati perjalanan. Dengan menggunakan teknologi 3D taman bermain pada permainan ini menjadi lebih hidup daripada versi yang sebelumnya. Meskipun tampilan visualisasinya berubah drastis, sistem permainannya masih tetap sama dengan versi pendahulunya. Tugas Anda pada permainan ini adalah memimpin pembangunan taman bermain yang baru lahir atau di tengah kegagalan, Anda bertugas untuk mengembangkan dan membangun taman bermain tersebut. Menciptakan sebuah taman hiburan yang melayani semua tamu adalah ide dasar dari permainan ini. Bagi mereka yang tidak akrab dengan seri atau belum digunakan untuk berurusan dengan tiga dimensi dalam permainan mereka, RollerCoaster Tycoon 3 memberikan tutorial ekstensif untuk membantu pemain dalam mengenal hampir semua aspek permainan.

Hal utama yang menjadi jantung dalam permainan RollerCoaster Tycoon 3 adalah rasa menyenangkan yang Anda rasakan ketika menonton peeps Anda menikmati taman Anda. Dalam permainan ini Anda dapat membangun RollerCoaster dan wahana-wahana permainan lainnya dengan tujuan membuat taman bermain Anda lebih ramai oleh pengunjung (peeps).

Beberapa hal baru yang terdapat dalam RollerCoaster Tycoon 3 antara lain:

Pengalaman yang luar biasa dengan grafis 3D baru!

  • Menaiki permainan dengan Coaster Cam ™
  • Membangun wahana permainan lebih mudah dengan user interface yang ditingkatkan
  • Menerangi malam dengan sistem pencahayaan taman baru
  • Melihat taman Anda dari setiap sudut dengan kontrol kamera lengkap
  • Melihat pemandangan taman yang indah termasuk matahari terbenam yang realistis, sinar bulan, pola cuaca dan banyak lagi.

Tamu yang beragam – setiap orang adalah unik!

  • Buat anggota keluarga dan teman-teman Anda sendiri dan menambahkannya ke taman Anda
  • Menanggapi individu suka dan tidak suka anak-anak, remaja dan orang dewasa
  • Melihat setiap individu yang memiliki animasi (termasuk ekspresi wajah!) perilaku, baik secara perorangan maupun orang banyak

Wahana permainan dan atraksi yang lebih banyak!

  • Membangun taman dengan dana tak terbatas melalui mode “Sandbox”
  • Menambahkan musik sendiri dari koleksi mp3 Anda
  • Terdapat wahana dan atraksi yang baru
  • Mendesain taman dengan 5 tema yang menyenangkan antara lain: Generic, Spooky, Western, Adventure dan Sci-fi

Untuk System Requirement permainan ini adalah sebagai berikut:

  • Operating System: Windows® 98/Me/2000/XP (Windows® XP recommended)
  • Processor: Pentium® III 733 MHz or compatible (Pentium® 4 1.2 GHz or compatible recommended)
  • Memory: 128 MB RAM; 256 MB for XP (256 MB; 384 MB for XP recommended)
  • Hard Disk Space: 600 MB free
  • CD-ROM Drive: 4X CD-ROM or faster (8X or faster recommended)
  • Video:Any ATI Radeon™ or GeForce™ 2 with 32MB or higher; or other video card with 32MB and hardware T&L (ATI Radeon™ 64 MB SDR or GeForce™ 2 Pro or other video card with 64 MB or more memory and hardware T&L recommended)*
  • Sound: Windows® 98/Me/2000/XP-compatible 16-bit sound card*
  • DirectX®: DirectX® version 9 (included) or higher

Untuk info lebih lanjut mengenai permainan ini dapat dilihat di sini 🙂

Untuk melihat video preview dari permainan ini dapat dilihat di sini 🙂

Permainan ini dapat di unduh di sini 🙂

Sumber gambar: http://www.gamespot.com/

Posted in Virtual Reality | Tagged: , | Leave a Comment »

 
%d bloggers like this: