tr-demoscene

the scene => scripting => processing => Konuyu başlatan: alobarnon - 28.12.2013 00:11:46

Başlık: Siftahı ben açayım :) (processing 1.5.1 çalışması) Spiral Fırtına
Gönderen: alobarnon - 28.12.2013 00:11:46
İ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: [Seç]
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;
  }
}
Başlık: Ynt: Siftahı ben açayım :) (processing 1.5.1 çalışması) Spiral Fırtına
Gönderen: skate - 28.12.2013 11:07:06
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? :)
Başlık: Ynt: Siftahı ben açayım :) (processing 1.5.1 çalışması) Spiral Fırtına
Gönderen: alobarnon - 28.12.2013 12:05:48
biraz tez canlılık var mı alobarnon kardeşim? :)

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.
Başlık: Ynt: Siftahı ben açayım :) (processing 1.5.1 çalışması) Spiral Fırtına
Gönderen: nightlord - 30.12.2013 22:33:22
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 :)
Başlık: Ynt: Siftahı ben açayım :) (processing 1.5.1 çalışması) Spiral Fırtına
Gönderen: alobarnon - 02.01.2014 10:44:46
Tanışma bölümüne scene bağlamında kısaca kendini tanıtan bir mesaj atabilir misin.

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 :)
Başlık: Ynt: Siftahı ben açayım :) (processing 1.5.1 çalışması) Spiral Fırtına
Gönderen: nightlord - 02.01.2014 21:08:11
http://www.tr-demoscene.info/index.php/topic,6872.0.html

Heheh konuyu biraz sakladık ki bulup kendinizi tanıtamayin diye :D Dur bir fırsat olduğunda bakıp ona ayrı bir folder açayım ben...
Başlık: Ynt: Siftahı ben açayım :) (processing 1.5.1 çalışması) Spiral Fırtına
Gönderen: alobarnon - 02.01.2014 22:16:13
http://www.tr-demoscene.info/index.php/topic,6872.0.html

Heheh konuyu biraz sakladık ki bulup kendinizi tanıtamayin diye :D Dur bir fırsat olduğunda bakıp ona ayrı bir folder açayım ben...

haha :) sen bunu yazarkene ben çoktan bulmuştum ve yazıyordum denk gelmiş :)