İlk başta Processing'i duyunca ağzımın suları akmıştı, bu da processing öğrenmeye çalıştığım ilk beş altı saatte yazmaya çalıştığım FPS motoru, processing ile oyun yapmanın bu kadar zor olacağını bileydim başlamazdım
![Şımarık :D](http://www.tr-demoscene.info/Smileys/default/cheesy.gif)
ama draw konusunda cidden çok eğlenceli, FPS motorununun temelini attıktan sonra baktım ki bu iş çok uzayacak bıraktım uğraşmayı, bari bi hem denemiş olayım hem de bi esprisi olsun diyerekten bi efekt yaratmaya çalıştım sahnenin ortasında, ilkten yavaş ve küçük başlıyor sonra hızlanarak büyüyor ve rengi değişmeye başlıyor vs bişeyler
![Mutlu :)](http://www.tr-demoscene.info/Smileys/default/smiley.gif)
benim netbookta 1.5.1 versiyondan yukarısı çalışmadı o bakımdan 1.5.1 versiyonunda yazdım bu kodu, ama sorun olmaz sanırım üst versiyonlarda da çalışır heralde...
bu arada unutmadan, FPS maksatlı başladığım için bu çalışmaya, şuan WASD tuşlarıyla hareket ve Y ekseninde mouse view aktif durumda.
import processing.opengl.*;
PFont font1;
float px = 125; //camera x
float py = -50; //camera y
float pz = 125; //camera z
float tx; //camera target x
float tz; //camera target z
float fov = 90; //distance between camera and camera target
float angle = 135; //current y rotation
float angles = 0; //current turning speed
float anglesmax = 2; // max turning speed
float anglev = 0.3; // turning velocity
float speed = 0; //current speed
float speedmax = 5; //max speed
float speedv = 0.4; //velocity
float sdistance = 1;
float sangle = 0;
float sangles = 0.1;
float sx = 0;
float sy = 0;
float sz = 0;
float s2x = 0;
float s2y = 0;
float s2z = 0;
boolean keyFront = false;
boolean keyBack = false;
boolean keyLeft = false;
boolean keyRight = false;
void setup() {
size(800, 600, P3D);
font1 = loadFont("Tahoma-48.vlw");
textFont(font1, 9);
textAlign(CENTER, CENTER);
noCursor();
}
void draw()
{
camera (px, py, pz, tx, map(mouseY, 500, 0, -15, -75), tz, 0, 1, 0);
background(0);
lights();
if (keyPressed && key == 'w'|| key =='W')
{
keyFront = true;
keyBack = false;
}
else if (keyPressed && key == 's'|| key =='S')
{
keyBack = true;
keyFront = false;
}
if (keyPressed && key == 'a'|| key =='A')
{
keyLeft = true;
keyRight = false;
}
else if (keyPressed && key == 'd'|| key =='D')
{
keyRight = true;
keyLeft = false;
}
if (keyFront == true)
{
if (speed < speedmax) speed += speedv;
}
else if (keyBack == true)
{
if (speed > speedmax*-1) speed -= speedv;
}
else if (speed < -0.2 || speed > 0.2) speed *= 0.95;
else speed = 0;
if (keyLeft == true)
{
if (angles < anglesmax) angles += anglev;
}
else if (keyRight == true)
{
if (angles > anglesmax*-1) angles -= anglev;
}
else if (angles < -0.2 || angles > 0.2) angles *= 0.85;
else angles = 0;
angle += angles;
px += cos(angle * PI/-180)*speed;
pz += sin(angle * PI/-180)*speed;
tx = px + fov * cos(angle * PI/-180);
tz = pz + fov * sin(angle * PI/-180);
//EFFECTS
sangle = 0;
sdistance = 1;
sy = -1;
for (int i = 0; i < frameCount; i++)
{
sangles += 0.00001;
sangle += sangles;
sdistance *= 1.005;
sy *= 1.005;
stroke(map(sy, -1, -100, 0, 255),map(sy, -1, -100, 255, 0),map(sy, -1, -100, 255, 0));
sx = sdistance * cos(sangle * PI/-180);
sz = sdistance * sin(sangle * PI/-180);
s2x = sdistance*1.005 * cos((sangle+5) * PI/-180);
s2z = sdistance*1.005 * sin((sangle+5) * PI/-180);
line(sx, sy, sz, s2x, sy, s2z);
}
//Workarea
stroke(255);
fill(255);
line(250, 0, 250, 250, 0, -250);
line(250, 0, 250, -250, 0, 250);
line(-250, 0, -250, 250, 0, -250);
line(-250, 0, -250, -250, 0, 250);
//XYZ Axes
stroke(255,0,0);
fill(255,0,0);
line(0, 0, 250, 0, 0, -250);
line(0, 250, 0, 0, -250, 0);
line(250, 0, 0, -250, 0, 0);
//XYZ Axes Texts
fill(255);
textSize(5);
text("+X", 25, 3, 0);
text("-X", -25, 3, 0);
text("+Y", 3, 25, 0);
text("-Y", 3, -25, 0);
text("+Z", 3, 0, 25);
text("-Z", 3, 0, -25);
}
void keyReleased()
{
if (key == 'w'|| key =='W')
{
keyFront = false;
}
else if (key == 's'|| key =='S')
{
keyBack = false;
}
if (key == 'a'|| key =='A')
{
keyLeft = false;
}
else if (key == 'd'|| key =='D')
{
keyRight = false;
}
}