the scene > processing

Siftahı ben açayım :) (processing 1.5.1 çalışması) Spiral Fırtına

(1/2) > >>

alobarnon:
İ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 :D 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 :) 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.


--- Kod: ---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;
  }
}

--- Kod sonu ---

skate:
processing 2.1'de de sorunsuz çalışıyor, eline sağlık.

"FPS motorununun temelini attıktan sonra baktım ki bu iş çok uzayacak..."

eğer birkaç saatte bir FPS yazarım ümidiyle yola çıktıysan haklısın, bu iş düşündüğüne göre çooook uzar. :) biraz daha sabırlı olmanı tavsiye ediyorum. 3-5 saatlik hiçbir çalışma dip düşürücü olmaz. bu güne kadar yayınlanmış ne kadar muhteşem oyun, demo varsa en azından birkaç haftalık büyük bir emeğin ürünüdür. Çoğu da aylar hatta yıllar alan çalışmanın sonucudur. yani hiç bilmediğin bir dili öğrenmeye çalışıp, beş altı saatte hakim olmadığın bir dilden FPS motoru yazmaya kalkıp "baktım bu iş çok uzayacak" demeni fazlasıyla yadırgadım. biraz tez canlılık var mı alobarnon kardeşim? :)

alobarnon:

--- Alıntı yapılan: skate - 28.12.2013 11:07:06 ---biraz tez canlılık var mı alobarnon kardeşim? :)

--- Alıntı sonu ---

Tez canlılık var tabiki heyecanlıdır sonuçta bu işler sonucu görmek istersin bir an önce ama bu birşeyleri geçiştireceğim anlamına gelmiyor sadece belki bundan bir iki sene sonra hal vaziyet toparlandığında, en azından şu netbooktan kurtulup bi desktop aldığımda daha detaylı ilgileneceğim bu konularla :D şimdilik öyle bir parmaklamış oldum mevzuyu nası bişey olduğunu anlamak için.

nightlord:
selamlar alobarnon, kim olduğunu anlamak için yazdığın oyun reviewleri ile parti sonuçlarını karşılaştırmam gerekti. Tanışma bölümüne scene bağlamında kısaca kendini tanıtan bir mesaj atabilir misin. İletişimimizin sonrası için daha verimli olur :)

alobarnon:

--- Alıntı yapılan: nightlord - 30.12.2013 22:33:22 ---Tanışma bölümüne scene bağlamında kısaca kendini tanıtan bir mesaj atabilir misin.
--- Alıntı sonu ---

Tabi olur, scene bağlamında olmasa da scene bağlamında bağlamında bişeyler olabilir, tabi tanışma bölümünü bulabilirsem :)

Navigasyon

[0] Mesajlar

[#] Sonraki Sayfa

Tam sürüme git