Codea Nedir? ve Nasıl Uygulama Geliştirilir?
Codea iPadleriniz için oyunlar ve simülasyonlar yaratmanıza ya da sahip olduğunuz herhangi bir görsel fikri oluşturmanıza yardım eden bir aplikasyondur. Düşüncelerinizi Multi-Touch ve ivmeölçer gibi iPad özelliklerinden yararlanarak etkileşimli kreasyonlara dönüştürmenizi sağlar.
Codea, kodunuza dokunmanıza izin verecek şekilde tasarlanmıştır. Yani bir rengi değiştirmek isterseniz sadece dokunun ve sürükleyin. Bir görüntü ya da sesin nasıl olacağına karar verirken, tam olarak ne istediğinizi seçmenize izin veren görsel düzenleyicileri kullanmanız için kodunuza dokunmanız yeterli!
Codea, Lua programlama dili üzerine kurulmuştur. Sembollere çok fazla güvenmeyen, basit ve zarif bir dil olarak iPad için mükemmel bir uygulama!
Codea, Two Lives Left şirketi tarafından yapılan iOS cihazları için bir Lua kod editörüdür. Görsel fikirleri, özellikle oyunlar ve simülasyonları hızla prototiplemek için tasarlanmıştır. Bitmiş projeler doğrudan uygulamadan Xcode‘a aktarılabilir. İşleme bölümünde bulunan çizim işlevleri için aynı yöntemlerin çoğunu kullanan İşleme programlama dili ile yakından ilgilidir.
Codea, 2011’in sonlarında App Store’da piyasaya sürüldü ve ilk iOS Lua editörlerinden biri oldu. Nisan 2012’de, tamamen Codea‘yı kullanan ilk oyun App Store‘da piyasaya sürüldü.
Mart 2014’te, 64 Bit mimarisi, yeniden tasarlanan kod düzenleyicisi ve çeşitli API geliştirmeleri ekleyen Codea 2.0 piyasaya sürüldü.
Ana Arayüz
Arayüz oldukça sade ve basit. Codea‘yı yüklediğinizde, bu sayfa karşınıza çıkacak:
Araçlar
En tepede örnekler, alt kısımda projeleriniz bulunmakta. Mevcut projeleri çoğaltabildiğinizden dolayı bir örneği bir projeye kolayca kopyalayabilirsiniz. Sol üstte dikkat ederseniz, sağında bir ok bulunan bir çubuk var. Bu, araç panelini ortaya çıkarır.
Yukarıdan aşağıya doğru:
Referans: Entegre yardım dosyalarını getirir
Shader Lab: Bir etkileşimli (ve mükemmel) GLSL shader editörü
Assets (Varlıklar): Varlık yönetimi (grafikler, sesler, gölgelendiriciler, vb.)
AirCode: Bir web tarayıcısına sahip bir bilgisayar kullanarak düzenlemek için Codea’yı etkinleştirir.
Ayarlar
Sağ üstteki ayarlar panelidir. Burada tema ve yazı tipi boyutlandırmayı ayarlayabilir ve en önemlisi Dropbox‘ınızı bağlayabilirsiniz. Bu, Codea‘ya Dropbox hesabı açmanıza olanak tanır ve Codea’nın içine ve dışına kolayca erişebilmenizi sağlar ki bu iOS cihazlarda kolayca yapılmayan bir şey.
Kod Düzenleme
En tepede, projenizdeki dosyaları temsil eden sekmeler vardır. Yeni bir sınıf veya dosya oluşturmak için sağ üstteki + ‘ya basın. Gördüğünüz gibi, ekran klavyesinin üst kısmında, programlamayı kolaylaştırmak için birkaç anahtar eklenmiştir. Bunlar, bir imleci sağa ve sola hareket ettirmek içindir. Entegre bir Bul ve Yardım düğmeleri de vardır. Bir USB klavyeyi bağlarsanız, ekran klavyesi kapanır.
Ve daha da önemlisi, entegre yardım dosyaları görseldeki gibidir:
Parametreler bölümü, uygulamanızla etkileşimde bulunmak için kullanışlı UI denetimleri oluşturmanızı sağlar. Çıktı temel olarak bir metin konsoludur. Simgeler, uygulamanızı duraklatmanıza, yeniden başlatmanıza, uygulamanızın bir anlık görüntüsüne ve video kapağına sahip olmanızı sağlar. Aircode‘u çalıştırdığınızda, iPad‘iniz bu ekrana geçerek düzenleme kodunu canlı tutmanıza ve gerçek zamanlı olarak çalıştığını görmenize izin verir. Ve kodunuzu çalıştırmak isterseniz (sağ altta Play simgesini tıklatarak) de karşınıza bu ekran gelir:
GLSL Editor
Burada Vertex ve Fragment komut dosyalarını düzenleyebilir ve sonucu sağdaki gerçek zamanda görebilirsiniz. Bindings ise gölgelendiricinize parametreler girebileceğiniz yerdir.
Bir Örnek
Mesela bir su dalgası efekti oluşturmak istiyorsunuz. Bunu Codea ile aşağıdaki kod satırları ile yapabilirsiniz.
Görseli şöyle;
Kod satırları ise şöyle;
— Water Test
function setup()
local vertices = {}
resolution = 19 — decrease for more fps, increase for slowlyness 😀
displayMode(FULLSCREEN)
t=0
Size=150
parameter(“Speed”,0,5,1.5)
parameter(“CamHeight”, -1000, 1000, 19.5)
parameter(“Angle”,-360, 360, -30)
parameter(“FieldOfView”, 10, 140, 90)
parameter(“NoiseScale”, 0,1,0.23)
parameter(“Scale2”, 1,100,15)
the3DViewMatrix = viewMatrix()
watch (“fps”)
fpscount=0
fpsamount = 0
for i=1,resolution do
vertices[i] ={}
for j=1,resolution do
vertices[i][j] = vec3(-75 +i*Size/resolution,0,-75+j*Size/resolution)
end
end
cubeverts = {}
for i=1,(resolution-1) do
for j=1,(resolution-1) do
table.insert(cubeverts, vertices[i][j])
table.insert(cubeverts, vertices[i+1][j])
table.insert(cubeverts, vertices[i][j+1])
table.insert(cubeverts, vertices[i+1][j])
table.insert(cubeverts, vertices[i][j+1])
table.insert(cubeverts, vertices[i+1][j+1])
end
end
ms = mesh()
ms.vertices = cubeverts
print(“Using “..table.maxn(cubeverts)..” vertices”)
— init colortable
triCol = {}
for i=1,((resolution-1)*(resolution-1)*6) do
tst = math.random(0,255)
table.insert(triCol, i, color(tst, tst, 255, 255) )
end
ms.colors = triCol
end
function draw()
perspective(FieldOfView, WIDTH/HEIGHT)
— Position the camera up and back, look at origin
camera(0,CamHeight,-10, 10,0,10, 0,1,0)
— This sets a dark background color
background(40, 40, 50)
translate(50,-Size/2,70)
rotate(Angle,0,1,0)
counter = 0
for i=1,(resolution-1) do
for j=1,(resolution-1) do
counter = counter + 1
if counter > 2 and j> 1 and i>1 then
ms:vertex(counter, ms:vertex(counter).x, ms:vertex(counter-2).y, ms:vertex(counter).z)
else
ms:vertex(counter, ms:vertex(counter).x,noise((i+t)*NoiseScale,(j+t)*NoiseScale)*Scale2, ms:vertex(counter).z)
end
if counter > 2 then
newcol = (ms:vertex(counter).y)*10
ms:color(counter, color(newcol, newcol, 255+newcol))
end
counter = counter + 1
if counter > 2 and j> 1 and i>1 then
ms:vertex(counter, ms:vertex(counter).x, ms:vertex(counter-2).y, ms:vertex(counter).z)
else
ms:vertex(counter, ms:vertex(counter).x,noise((i+t+1)*NoiseScale,(j+t)*NoiseScale)*Scale2, ms:vertex(counter).z)
end
newcol = (ms:vertex(counter).y)*10
ms:color(counter, color(newcol, newcol, 255+newcol))
counter = counter + 1
ms:vertex(counter, ms:vertex(counter).x,noise((i+t)*NoiseScale,(j+t+1)*NoiseScale)*Scale2, ms:vertex(counter).z)
newcol = (ms:vertex(counter).y)*10
ms:color(counter, color(newcol, newcol, 255+newcol))
counter = counter + 1
if counter > 2 and j> 1 and i>1 then
ms:vertex(counter, ms:vertex(counter).x, ms:vertex(counter-2).y, ms:vertex(counter).z)
else
ms:vertex(counter, ms:vertex(counter).x,noise((i+t+1)*NoiseScale,(j+t)*NoiseScale)*Scale2, ms:vertex(counter).z)
end
newcol = (ms:vertex(counter).y)*10
ms:color(counter, color(newcol, newcol, 255+newcol))
counter = counter + 1
ms:vertex(counter, ms:vertex(counter).x,noise((i+t)*NoiseScale,(j+t+1)*NoiseScale)*Scale2, ms:vertex(counter).z)
newcol = (ms:vertex(counter).y)*10
ms:color(counter, color(newcol, newcol, 255+newcol))
counter = counter + 1
ms:vertex(counter, ms:vertex(counter).x,noise((i+t+1)*NoiseScale,(j+t+1)*NoiseScale)*Scale2, ms:vertex(counter).z)
newcol = (ms:vertex(counter).y)*10
ms:color(counter, color(newcol, newcol, 255+newcol))
end
end
ms:draw()
t = t + (DeltaTime*Speed)
fpscount = fpscount + 1
fpsamount = fpsamount + DeltaTime
if fpscount == 10 then
fps = fpsamount /10
fps = 1/fps
fpsamount =0
fpscount=0
end
end
function touched()
if CurrentTouch.state==BEGAN then
if displayMode() == FULLSCREEN then
displayMode(STANDARD)
else
displayMode(FULLSCREEN)
end
end
end