Neler yeni

Yeni mesajlar Yeni konular En çok mesaj En çok tepki En çok görüntülenen

Actionscript 3 Import Hakkında

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
Merhaba Flash Cs3 ile OOP tabanlı Oyun yazmaktayım.

Ancak cok basit ve enteresan bir sorunla karşıylaşıyorum. DocumentClass a tanımladıgım class dosyasına dısardan bır dosya cagıramıyorum import packagename.classname dıye cagırmama ragmen bulunamamaktadır dıye hata almaktayım.

Enteresan olan örneğin cagırdıgım dosyayı bulamıyor ancak o bulamadıgı dosyanın ıcıne yazdıgım baska bır dosya cagırma komutuna da cevap donup onuda bulamadıgını soyluyor. Eğer Dosyayı bulamadıysa onun cagırmak ısteıdıgı dosyayı nerden bılıyor ? =)

Şimdiden Teşekkürler
 

Benzer konular

FlashDeveloper

🏅Acemi Tasarımcı🏅
Katılım
21 Ağu 2009
Mesajlar
62
Tepkime puanı
2
dışardan çağıracağınız .as uzantılı dosyayı direk import edin import asd gibi bu şekilde sorunda olmaz.
 

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
Öncelikle cevabın için teşekkür ederim. Evet bahsettiğiniz şekilde direk dosya çağırma işlemi olarak başarıyla sonuçlanıyor.

Ancak benım merak ettiğim husus actionscript özellik olarak package lere ve onun alt sınıflarına ıstedıgımız sekılde ister butun classlara ister tek class'a ulasabılme ımkanı verıyor olması lazım =) Adobe'un yayınladıgı kendı makalesındekı ornek calısmaylada denedıgımde package uzerınden ulasım yapamıyorum :(

Neysekı gosterdıgınız yolla calısma tıkanmadan kurtuldu. Ancak merak açısından package mantıgıyla ulasımı nasıl yapabılecegımıde belırtırsenız sevınırım.
 

keremToo

🏅Acemi Tasarımcı🏅
Katılım
5 Kas 2008
Mesajlar
97
Tepkime puanı
2
Web sitesi
www.keremtoo.com
Package belli dizinler içerisindeki class'lardan olusmaktadır. Ornegin ben com klasörü içerisinde klasörü org, org klasörü içersinde src klasörü içerisindeki DocumentClass'ı cağıracaksam onu söle import etmeliyim:

import org.com.scr.DocumentClass

tabiki Fla içersindeki Documen Class ile cağırmak istiyorsam org.com.scr.DocumentClass gene bulundugu dizini yazarak kulanmam gerek kullandığın class arasındaki iletişim ve erişim gibi olayları merak ediyorsan OOP yazıyorsanda bunu cözmüş omalıydın u gune kadar
 

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
walla oop uzerıne zaman harcadıgım olmuştur ama normalde bana java kullanırım ama bu seferkı musterım itinayla flash uzerıne tutturunca actionscript 3 ogrenmek durumunda kaldım ve as3 un cok enteresan kuralları var.

Aynı dosyada 1 den fazla public class olamaz fln gıbı . Dokuman olarak kıtap ve adobe'un genel dokumanınıda ındırıp ınceledım ama dedıgım gıbı sonuca ulasamadım.

Neyse tesekkurler cevabın ıcın
 

keremToo

🏅Acemi Tasarımcı🏅
Katılım
5 Kas 2008
Mesajlar
97
Tepkime puanı
2
Web sitesi
www.keremtoo.com
Aynı klasör içerisinde birden cok public internal gibi erişimleri kullana bilirsin bunda bir kısıtlama yok ama sadık kalman gereken kural su olmalı yazdıgın class erişimi internal ise kendi yapıcısını kullanmak zorundasın yani internal ile geliştirmek istediğin yada uzuzantı olarak referns oldıgın subClass lar aynı klasör içerisinde olmak zorunda eğer bu public ise her yerden ulaşa bilirsin demek oluyor dizini doğru yazdığın sürece protected da daha cok soyut yöntemler geleri subClass larda gecersiz olarak kullanmalısın ama burada tam olarak senin yapmaya calıstıgınıda nalamak gerek
 

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
internal'i tecrübe edemedimde Public class her dosyada 1 tane olabılır dıye uyarı veriyordu flash.

Ben satranç oyunu yazıyorumda bunun için her taşı class gösterim dedim haliyle dışardan erişilicek.Ancak Public olarak hepsını tek dosyaya koyamadım her dosyada 1 tane olur dedi flash ve mecburen her taş a ayrı .as dosyası açmak zorunda kaldım.

Acaba Yanlış bir yön mü ? =)
 

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
internal 'i de tecrübe ettim şimdi :D ondada aynı hata
hatta description şu şekilde.


5006: An ActionScript file can not have more than one externally visible definition
 

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
en basıtı test.as dıyelım

package
{

public class a1
{
// 1. class ıcın herhangı functıon fln.
}

public class a2
{
// 2. class ıcın herhangı functıon fln.
}

}

bunu document classta tanıtıp derledıgımızde o hatayı verıcek cunku 2 publıc class aynı .as ıcınde dıye
 

keremToo

🏅Acemi Tasarımcı🏅
Katılım
5 Kas 2008
Mesajlar
97
Tepkime puanı
2
Web sitesi
www.keremtoo.com
Sorunu anladım galiba sen aynı sınıf içerisinde 2 ayri public class beyanında bulunmak istiyorsun evet AS3 buna izin vermez cünkü her sınıf için sınıf beyanını bir kerede buluna bilirsin bir özel durum haricinde ki zaten bu durumda bir yapıdan çok yapının parcası icin kullanilabilir yani senin isine yaramiyacak bir durumdur. ben anlaman icin kucuk bir ornek hazırladım ama genede izah etmekte fayda var.

package
{
public class BaseClass
{
public function BaseClass()
{

}
}
}

en temel haliyle bir sınıf böle olmali ve sınıf içerisinde 2. bir public class beyanı bulunamaz
ama public function public var gibi beyanlara bir kısıtlama yok. 2. bir sınıfı import yöntemile cağıra bilirsin - import klasör.BaseClass2 - gibi sınıfı ithal ettiğinde yöntem ve özelliklerinin sınırlaına göre kullana bilirsin yada extends ederek uzata bilirsin - public class BaseClass extends BaseClass2 - diyer uzattığın sınıf içerisinde tum yöntem ve ozellikleri devralır bu iki örnek icin uygulama yaptım incelersen daha iyi anliyacaksin

RapidShare: 1-CLICK Web hosting - Easy Filehosting
 

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
Anladım dostum saolasın emegıne saglık.

işte şuan satranc yazıyorum 32 taş var her bırı ayrı class dıyınce kafadan 32 tane tas ıcın 2 tane baglı oldukları sıyah ve beyaz sınıfı ıcın bı tane de en dıs tahta sınıfı ıcın olunca 35 tane dosya oluo bos yere dıye mızmızlanıodumda =) cozum yokmuş.

zaten o import sorunumuda o dırek dosya adı durumuyla baya asmıstım =) bu cozum surecınde oyunu bıtırmeye yaklastım. Şimdide class tan bi nesne uretırken yasadıgım sıkıntı var bakalım onu nası cozucem =)
 

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
hemen yazım =)

ya benım mevzu bıraz karıstı aslında sureklı alternatıf uretmekten dolayı =)

bu satranc oyununda oncelıkle her tası ayrı class tanımladım sonrasında classlardan nesne olusturunca her olusan nesneye Click için eventlistener ekledim
ancak tasa tıkladıgında tıkladıgım tasın adını ogrenemedım =) yanı nesneyı olusturunca .name ıle ısmı verıyorum ekrana basıyorum ısım gelıo event lıstenera geldıgımde target.name dıyorum Instance24 fln gıbı abuk ısımler cıkıor.

Bende dedimki taşı öğrenmek için her taşın koordinatı sabittir nasılsa koordinatını alım o koordinat tahtanın hanı karesinde mesela a4 temı sonra classlara gıdım abık a4 te suan hangı tas var ... Boylece tasın adını genede elde etmıs olurum dedım =)

Sonra ısler devam ederken tası oynatmak ıcın yenı karenın koordınatına gore taşın gorunumunu ayarlamak için tasın height ve width 'ıne ulasıyım dedım. Çunku oyun 3 boyutlu ve her tasın her karedekı gorunumu farklı. Hal boyle olunca alabılecegım tek sabıt koordinat sag alt kosedeki koordinat =) (en+boy)/2 den hipotenus bulur tasın sag ust kosesıne gore ayarlamak ıcın alt koordınata eklerım dedım.
Amma velakin tasları olustururken ekrana bas dedıgımde en boyu verıyor ama sonucta ben nesneye donusturuyorum. Islem esnasında nesne uzerınden sorguladıgımda en de boyda 0 cıkıyor...

Yani git gide saçmaladı işlemler =)

Şimdi sorunun ozenine gelirsek ... Classları nesneye cevırdıkten sonra bılgılere ulasmada sıkıntım var ... Yada ulasabıldıgım bılgılerı bıle functıon'a soktugumda goremıyorum... =) :emo1:
 

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
Resım Upload Kodum :

package{
import flash.net.URLRequest;
import flash.display.Sprite;
import flash.display.Loader;
import flash.events.*;
public class Resim extends Sprite{
private var holder:Sprite = new Sprite();
private var loader:Loader = new Loader();
private var request:URLRequest;
public function Resim(url:String)
{
request = new URLRequest(url);
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.INIT, goster);

}
public function goster(e:Event):void
{
holder.addChild(loader);
this.addChild(holder);
}
/////////////////////////////////////////////////////////////////////

Sonrasında Resim olayını nesneye cevırdıgım taş sınıfının kodu :

package{
import flash.net.URLRequest;
import flash.display.*;
import flash.events.*;
import Resim;
public class b_p1 extends beyaz{
public var en:Number,boy:Number;
public function b_p1(){
konum="a2";
var bg_bp1=new Resim("taslar/beyaz/b_piyon_a2.png");
// Bu noktada bg_bp1.height e cevap 0 donuyor
addChild(bg_bp1);
}
}
}

////////////////////////////////////////////////////////////////////////

Şeklinde karmaşık anlatamadıgım nokta varsa anlatabılır kaynak kodlarının tamamınıda ıstersen upload edebılırım =)

Yeterkı şu sulanmış beyne biraz yardımcı ol =) Şimdiden Teşekkürler
 

keremToo

🏅Acemi Tasarımcı🏅
Katılım
5 Kas 2008
Mesajlar
97
Tepkime puanı
2
Web sitesi
www.keremtoo.com
dostum evvela her tas için bir class olayı gereksiz ve hazmetli bir yol bunun icin tek bir sınıf yeterli olacaktır. sen uretmek istediğin kadar sayıda for dongüsü içine de tasları coğalt mesela kullandığın tasların ismini ve imglerini xml'den okutuyorsun nasılsa farklı gruplar oldugunu düşürnürsek siyah ve beyaz gibi siyah.xml ve beyaz.xml gibi data olustur. xmlLoader.as bu dataları yuklesin ve birde bunların dizilişi için ir baska sınıf düşün display.as bu sınıfda aldığı iki farklı datayı 2 ayrı array içerisine alsın artık bArray içerisinde beyaz.xml verileri ve sArray içerisinde de siyah.xml verileri mevcut. artık sen bu iki dizi nin uzunlugu kadar(lenght) bir döngü kur x.= i * dizi.width gibi hangi diziyi kullanıyorsan sahneye ekleye bilirsin isim konusuna gelirsek bunu mevcut xml içerisinde isme eşitleye bilirsinde dizi.name = xml.node.@name; gibi yada sunu yapabilirsin dizi.name="siyahtaslar" + i ve event olarak gene döngü içerisinde dizi.addEventListener(MouseEvent.CLICK, clickhandler)
function clickhandler(e:MouseEvent):void
{
trace(e.target.name)
}
 

ogcetin

🌱Yeni Üye🌱
Katılım
21 Eyl 2008
Mesajlar
21
Tepkime puanı
0
sımdı attıgım class'a baktıysan dostum her tasın hem konumunu hem resmını tutuyorum cunku tasın her hamlesınde konum degısırken resımde degısıcek cunku satranc 3 boyutlu...

Ayrıca xml olayındanda cekınıyorum cunku 100.000 kısının aynı anda baglanacagı bır sıstem oldugundan dolayı coklu gruplarda yavaslama olur gıbı gelıyor. Oylekı tasların resımlerını bıle dısardan cekıorum. Cunku 7200 tane resım var =)

ayrıca e.target.name den ulasamıyorum işte :( event listenerdan once ornegın bp1.name ı trace edıyorum ekrana adı gelıo ama sonrasında event lıstener da bp1 e tıklamama ragmen e.target.name dedıgımde Instance24 gıbı ısımler donuo... Her tas ıcın aynı sorun :(
 
Üst