Gönderen Konu: Siftahı ben açayım :) (processing 1.5.1 çalışması) Spiral Fırtına  (Okunma sayısı 12128 defa)

Hızlı düğmeleri aç

alobarnon


  • Ziyaretçi
İ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;
  }
}

Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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? :)

Hızlı düğmeleri aç

alobarnon


  • Ziyaretçi
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.

Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
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 :)

Hızlı düğmeleri aç

alobarnon


  • Ziyaretçi
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 :)

Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
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...

Hızlı düğmeleri aç

alobarnon


  • Ziyaretçi
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ş :)