Türkiye Online Medya Araştırması

İçeriğin rss beslemesi kullanımda değil Soru - Cevap Bölümü / Kategori: Programlama

21/03/2010 - 11:41:09 cevap (20) Okunma : 3441 Bu yazıyı 4 kişi tuttu.

AS3 - Mc yi 360 Derece Döndürme

Öncelikle merhaba. Arkadaşlar şu kodlar sayesinde mc yi 360 derece döndürebiliyorum;


import flash.geom.*;
var distance:Number = 50;
var alfa:Number = 180
var bX:Number = daire.x;
var bY:Number = daire.y;

function Dondurme (evt:Event):void {
    alfa += 2;
    var angle:Number = 2 * Math.PI * (alfa / 360 );
    var polarpoint:Point=Point.polar(distance,angle);
    daire.x = bX + polarpoint.x;
    daire.y = bY + polarpoint.y;
}

addEventListener (Event.ENTER_FRAME, Dondurme);

Benim yapmak istediğim bu dönüşü yarım olarak yapması. Yani yarım daire çizecek ve diğer noktaya geçecek. Bunun için ne yapmam gerekiyor acaba bir türlü denklemini kuramadım.

Şimdiden teşekkürler...

 1 2 »  son »
adres MotionCoder profilini göster
Mehmet KARACA 08.12.2008 00:42:36
En iyi cevap mı ?

merhaba umarım isine yarar.


function angle_To( mc:MovieClip, radius:Number, angle:Number ):void
{
    // default olarak sıfır noktası saat 3 yönün dedir. saat 9 yonune almak için
    angle += 180;

    mc.x = Math.cos(angle*Math.PI/180)*radius +stage.stageWidth*.5;
    mc.y = Math.sin(angle*Math.PI/180)*radius +stage.stageHeight*.5;
}


var sayac:Number = 0;
function Dondurme (evt:Event):void {
    sayac++
    angle_To(daire,200,sayac%180)
}
addEventListener (Event.ENTER_FRAME, Dondurme);

kolaygelsin..<<

adres Safakizilkaya profilini göster
Safa kızılkaya 08.12.2008 02:20:29
En iyi cevap mı ?

Şeker gibi bir çözüm. Kutlarım.

adres MotionCoder profilini göster
Mehmet KARACA 08.12.2008 07:53:11
En iyi cevap mı ?

cok tesekkurler ustadım.

tum muslumanların bayramı mubarek olsun. saglık ve huzurlu bayramlar dilerim.

adres Salih Dincer profilini göster
Salih Dincer 08.12.2008 09:00:34
En iyi cevap mı ?

Programcılıkta şöyle bir söz vardır:

"Bir işlemi daha az satır (kaynak, zaman) da yapıyorsan bu iyi bir koddur."

Yay çizen benzer bir sürü fonksiyon görmüştüm. Bunu iki satırla yapanına hiç şahit olmamıştım.

Bu yüzden ben de sizi kutlar ve bayramınızı tebrik ederim...

adres youngwe profilini göster
Ertuğrul Erkan 08.12.2008 14:55:13
En iyi cevap mı ?

Çok teşekkür ederim. Bu arada herkesin bayramı da kutlu olsun. Hocam bir soru daha sormak istiyorum. Şimdi bu sahnenin tamamı için yapılmış bir fonksiyon. Benim istediğim şey ise daire.x i yay şeklinde kısa bir mesafe olarak döndürmek.

Bir similatör yapıyorum. Bu yüzden de herşey kafadan hesaplanıyor. Ben belirli bir y kodinatında bu işlemi yaptıracağım. Bu yüzden istedim. Birde hocam tamamen sahnede yapması da gerekmiyor. Kısa birkaç px lik açı olsa yeter. Yalnız denklemi bir türlü tutturamadım :/

adres MotionCoder profilini göster
Mehmet KARACA 08.12.2008 18:25:03
En iyi cevap mı ?

merhaba

<< tesekkurler arkadaslar :)

asagıda biraz daha anlasılır bi ornek var


var cemberin_sahnedeki_x_konumu:Number = 100;
var cemberin_sahnedeki_y_konumu:Number = 100;


var cebberin_genisligi:Number = 100;
var cemberin_yuksekligi:Number = 100;

var cemberin_cevresindeki_birim_sayisi = (Math.PI*2)/360;   // cemberin cevresi 360 birimden olusuyor!

var cember_cevresinde_gidilecek_birim:Number = 270;

mc.x = Math.cos( cember_cevresinde_gidilecek_birim *cemberin_cevresindeki_birim_sayisi ) * cebberin_genisligi + cemberin_sahnedeki_x_konumu
mc.y = Math.sin( cember_cevresinde_gidilecek_birim *cemberin_cevresindeki_birim_sayisi ) * cemberin_yuksekligi + cemberin_sahnedeki_y_konumu

kolaygelsin..<<

adres youngwe profilini göster
Ertuğrul Erkan 08.12.2008 18:48:44
En iyi cevap mı ?

Çok oluyorum ama hocam yine olmadı;


function Dondurme (evt:Event):void {

var cemberin_sahnedeki_x_konumu:Number = daire.x;
var cemberin_sahnedeki_y_konumu:Number = daire.y;

var cebberin_genisligi:Number = 31;
var cemberin_yuksekligi:Number = 31;

var cemberin_cevresindeki_birim_sayisi = (Math.PI*2)/180;   // cemberin cevresi 360 birimden olusuyor!

var cember_cevresinde_gidilecek_birim:Number = 150;
daire.x = Math.cos( cember_cevresinde_gidilecek_birim * cemberin_cevresindeki_birim_sayisi ) * cebberin_genisligi + cemberin_sahnedeki_x_konumu
daire.y = Math.sin( cember_cevresinde_gidilecek_birim * cemberin_cevresindeki_birim_sayisi ) * cemberin_yuksekligi + cemberin_sahnedeki_y_konumu

}
addEventListener (Event.ENTER_FRAME, Dondurme);

Mc kafasına göre sürekli ileri gidiyor :S Tam olarak şunu yapmak istiyorum;

mmistanbul.com

Burada ilk konuma kendisi geliyor ( bir takım hesaplamalar ile ). Benim amacım onu ikinci konuma getirmek. Kodun neresinde sorun var acaba?

adres MotionCoder profilini göster
Mehmet KARACA 08.12.2008 19:39:29
En iyi cevap mı ?

merhaba

çok olmuyorsun :)

istedigin hareket 180 - 360 birimleri arasında gerceklesiyo


var cemberin_sahnedeki_x_konumu:Number = daire.x;
var cemberin_sahnedeki_y_konumu:Number = daire.y;

var cebberin_genisligi:Number = 31;
var cemberin_yuksekligi:Number = 31;

var cemberin_cevresindeki_birim_sayisi = (Math.PI*2)/360;// cemberin cevresi 360 birimden olusuyor!


// cemberim birim baslangıc noktası default olarak saat 3 konumundadır  herhangi bi degisiklik yapmıyorum.
var baslangic_birim:Number = 180;
var bitis_birim:Number = 360;


var cember_cevresinde_gidilecek_birim:Number = baslangic_birim;

function Dondurme(evt:Event):void {

    cember_cevresinde_gidilecek_birim += 10;
    if( cember_cevresinde_gidilecek_birim > bitis_birim ){
        cember_cevresinde_gidilecek_birim = baslangic_birim
    }


    daire.x = Math.cos( cember_cevresinde_gidilecek_birim * cemberin_cevresindeki_birim_sayisi ) * cebberin_genisligi + cemberin_sahnedeki_x_konumu;
    daire.y = Math.sin( cember_cevresinde_gidilecek_birim * cemberin_cevresindeki_birim_sayisi ) * cemberin_yuksekligi + cemberin_sahnedeki_y_konumu;

}

addEventListener(Event.ENTER_FRAME, Dondurme);

bukodları denediginde çalısıcaktır sonrasında ilk yazdıgım ornege bakar san ordaki ornegide anlicaksın.

kolaygelsin..<<

adres youngwe profilini göster
Ertuğrul Erkan 08.12.2008 19:52:37
En iyi cevap mı ?

Çok teşekkür ederim hocam. En son verdiğiniz örnek oldu. Benim sorunum anlamakta değildi de mantığını oturtamadım bir türlü. Yoksa verilerine ne anlama geldiğini biliyorum :) Neyse iyi günler, iyi çalışmalar...

adres youngwe profilini göster
Ertuğrul Erkan 08.12.2008 20:07:56
En iyi cevap mı ?

Hocam biraz salakça gelebilir ama bunu nasıl durduruyoruz? İf ile şart koydum, fonksiyonunu sildim, dışarıdan kontrol ettirdim hatta höst falan dedim ama durmuyor kerata :)

adres MotionCoder profilini göster
Mehmet KARACA 08.12.2008 20:25:56
En iyi cevap mı ?

function host(){ removeEventListener( Event.ENTER_FRAME , Dondurme ) }

host();

adres youngwe profilini göster
Ertuğrul Erkan 08.12.2008 20:34:29
En iyi cevap mı ?

Hocam event nasıl durdurulur bunu biliyorum zaten. Benim demek istediğim bir dönüşü gerçekleştirince durmasını sağlamak. Yalnız bir türlü yapamadım. İlk konumla son konumu karşılaştırıyorum ama malesef :S

adres MotionCoder profilini göster
Mehmet KARACA 08.12.2008 20:44:59
En iyi cevap mı ?

merhaba


if( cember_cevresinde_gidilecek_birim == bitis_birim ){
   trace("cember_cevresinde_gidilecek_birim 360 'a esit")
   removeEventListener(Event.ENTER_FRAME,Dondurme)
}

bunu denemedim deme sakın :S

adres Salih Dincer profilini göster
Salih Dincer 08.12.2008 20:46:26
En iyi cevap mı ?

Belki ne demek istediğiniz anlayamamış olabilirim. Ama çorbada benim de tuzum olsun istedim. Fonksiyona iki tane değer ekledim:

function açıÇiz(Nesne:MovieClip,
                Sx:Number, Sy:Number,
                Çap:Number,
                Açı:Number ):void {
    Nesne.x = Math.cos(Açı*Math.PI/180)*Çap+Sx;
    Nesne.y = Math.sin(Açı*Math.PI/180)*Çap+Sy;
}

Sonra sahneyi 600x800@60fps değerlerine ayarladım. Herhangi bir yere de daire isminde (instancename) MC koydum. Hani küçük yarış arabalarının pisti olur ya, sahnede öyle dolaştı..:)

İstediğiniz bu muydu?

var Sayaç:Number = 0;
var Çiz:Sprite = new Sprite();
addChild(Çiz);
Çiz.graphics.lineStyle(2,0xFF0000);
function Döndürme (olay:Event):void {
    Sayaç++;
    if(Sayaç<180) açıÇiz(daire, 300, 360, 300,Sayaç%180+180)
    if(Sayaç==1) Çiz.graphics.moveTo(daire.x,daire.y);
    Çiz.graphics.lineTo(daire.x,daire.y);
    if(Sayaç<360 && Sayaç>180) daire.y++;
    if(Sayaç<540 && Sayaç>360) açıÇiz(daire, 300, 540, 300, Sayaç%180)
    if(Sayaç<740 && Sayaç>540) daire.y--;
    if(Sayaç==740) removeEventListener (Event.ENTER_FRAME, Döndürme);
}
addEventListener (Event.ENTER_FRAME, Döndürme);
adres youngwe profilini göster
Ertuğrul Erkan 08.12.2008 20:57:23
En iyi cevap mı ?

Mehmet hocam sizinkini denedim olmuyor :D Adam sürekli baştan başlıyor. Salih hocam sizinkinide şimdi deniyorum...

 1 2 »  son »

aç-kapa Bu Yazıyı Tutanlar

yeni üyelik | şifremi unuttum

aç-kapa Toplantı Özgür Yazılım ve Linux Günleri '10

Özgür Yazılım ve Linux Günleri '10

İstanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü ve Linux Kullanıcıları Derneği'nin 9 yıldır düzenlemekte oldukları etkinlikler bu yıl `Özgür Y...
Kategori: Toplantı

aç-kapa Yarışma 3. Uluslararası Ekslibris Yarışması: İstanbul 2010

3. Uluslararası Ekslibris Yarışması: İstanbul 2010

İstanbul Ekslibris Dernegi, Feyziye Mektepleri Vakfı ve Işık Üniversitesi, kitaplar için mülkiyet işareti olarak kabul edilen ve üzerinde estetik dege...
Kategori: Yarışma

aç-kapa Konferans Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Generally speaking, the term "New" brought about debates. We try to open up and elucidate the term "New" along with "Interact...
Kategori: Konferans

aç-kapa Konferans 3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

Konferans ile ilgili ayrıntılı bilgiye aşağıdaki bağlantıdan ulaşabilirsiniz: http://www.futurelearning.org.tr/katilim_cagrisitr.pdf ...
Kategori: Konferans

üyeler Son Kahramanlar...

stats Kimler Burada? web stats

Son 1 dakika içinde MMIstanbul' da 54 (50 kayıtlı, 4 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:

...

Blog Bölümü Blogevi.com'a Taşınıyor

Selam arkadaşlar MMIstanbul'da , tasarımcı ve programcıların blog yazılarını "feedleyerek" MMIstanbul okurlarını MMIstanbul dışın ...

7.500'üncü üyemiz Cem Koç!

Neler Yapılabilir?

500 Hatası Hakkında!

Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)

coldfusion mysql ubuntu
 
sponsor adobe istanbul