flash.utils paketi, kod çalıştırmasını zamanlama, sınıflar ve nesneler hakkında bilgi alma ve escape karakterlerinin dönüştürmeye yönelik çeşitli paket düzeyinde işlevler içerir.
İşlev | Tanımlayan: | ||
---|---|---|---|
Belirlenmiş bir setInterval() çağrısını iptal eder. | flash.utils | ||
Belirlenmiş bir setTimeout() çağrısını iptal eder. | flash.utils | ||
Yöntemin parametresi olarak adlandırılan ActionScript nesnesini tanımlayan bir XML nesnesi üretir. | flash.utils | ||
Girdi dizesinin atlamalı bir kopyasını, System.useCodePage değerine bağlı olarak UTF-8 veya sistem kod sayfasına göre kodlanmış halini döndürür. | flash.utils | ||
name parametresi tarafından belirtilen sınıftan bir sınıf nesnesine başvuru döndürür. | flash.utils | ||
Nesnenin tam nitelikli sınıf adını döndürür. | flash.utils | ||
Değer parametresinin belirttiği nesnenin taban sınıfının tam nitelikli adını döndürür. | flash.utils | ||
Göreceli saati hesaplamak için kullanılır. | flash.utils | ||
Belirtilen bir aralıkta (milisaniye olarak) bir işlev çalıştırır. | flash.utils | ||
Belirli bir işlevi belirli bir gecikmeden sonra (milisaniye olarak) çalıştırır. | flash.utils | ||
Girdi dizesinin, System.useCodePage değerine bağlı olarak sistem kod sayfasından veya UTF-8'den kodu çözülmüş atlamasız bir kopyasını döndürür. | flash.utils |
clearInterval | () | işlev |
public function clearInterval(id:uint):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9 |
Belirtilen bir setInterval()
çağrısını iptal eder.
Parametreler
id:uint — Kendisi için, aşağıdaki gibi bir değişken ayarladığınız, setInterval() çağrısının kimliği:
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
myRepeatingFunction()
çağırarak, bir zaman aralığı oluşturmak için setInterval()
yöntemini kullanır.
myRepeatingFunction
yönteminin her çağrısı, counter
özelliğini artırır ve stopCount
özelliğine eşit olduğunda, clearInterval()
yöntemi daha önceden oluşturulan aralığa ait bir başvuru kimliği olan intervalId
özelliğiyle çağrılır.
package { import flash.display.Sprite; import flash.utils.*; public class ClearIntervalExample extends Sprite { private var intervalDuration:Number = 1000; // duration between intervals, in milliseconds private var intervalId:uint; private var counter:uint = 0; private var stopCount:uint = 3; public function ClearIntervalExample() { intervalId = setInterval(myRepeatingFunction, intervalDuration, "Hello", "World"); } public function myRepeatingFunction():void { trace(arguments[0] + " " + arguments[1]); counter++; if(counter == stopCount) { trace("Clearing Interval"); clearInterval(intervalId); } } } }
clearTimeout | () | işlev |
public function clearTimeout(id:uint):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9 |
Belirtilen bir setTimeout()
çağrısını iptal eder.
Parametreler
id:uint — Kendisi için, aşağıdaki gibi bir değişken ayarladığınız, setTimeout() çağrısının kimliği:
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
setTimeout()
yöntemini kullanır.
Bir milyon kez tekrarlanacak bir döngü oluşturur. Sistem bu isteği bir saniyenin geçişinden daha hızlı olarak işleyebiliyorsa, clearTimeout()
öğesi setTimeout()
isteğini kaldırır ve myDelayedFunction()
çağrılmaz.
package { import flash.display.Sprite; import flash.utils.*; public class ClearTimeoutExample extends Sprite { private var delay:Number = 1000; // delay before calling myDelayedFunction private var intervalId:uint; private var count:uint = 1000000; public function ClearTimeoutExample() { intervalId = setTimeout(myDelayedFunction, delay); startCounting(); } public function startCounting():void { var i:uint = 0; do { if(i == count-1) { clearTimeout(intervalId); trace("Your computer can count to " + count + " in less than " + delay/1000 + " seconds."); } i++; } while(i < count) } public function myDelayedFunction():void { trace("Time expired."); } } }
describeType | () | işlev |
public function describeType(value:*):XML
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Yöntemin parametresi olarak adlandırılan ActionScript nesnesini tanımlayan bir XML nesnesi üretir. Bu yöntem ActionScript dili için reflection programlama konseptini uygular.
value
parametresi bir türün örneğiyse, döndürülen XML nesnesi söz konusu türün tüm örnek özelliklerini içerir ancak statik özellikleri içermez. Bu durumu, XML nesnesini ayrıştırırken <type>
etiketinin isStatic
niteliğinin değerini inceleyerek (value
parametresi bir türün örneği olduğunda false
olan) denetleyebilirsiniz.
Bir türün statik özelliklerini elde etmek için, türün kendisini value
parametresi için iletin. Döndürülen XML nesnesi türün statik özelliklerini içermesinin yanında örnek özelliklerinin tamamını da içerir. Örnek özellikler statik özelliklerden ayrılmaları için <factory>
adlı bir etiketin içindedir. Bu durumda, <type>
etiketinin isStatic
niteliği true
olur.
Not: Yalnızca bir nesnenin miras ağacını geçmeniz gerekiyorsa ve describeType()
tarafından sağlanan diğer bilgilere ihtiyacınız yoksa, getQualifiedClassName()
ve getQualifiedSuperclassName()
işlevlerini kullanın.
Aşağıdaki tablo, describeType()
tarafından oluşturulan XML nesnesinin bazı etiketlerini ve niteliklerini açıklar (döndürülen tüm sınıf ve arabirim adları tam nitelikli biçimdedir):
Etiket | Nitelik | Açıklama |
---|---|---|
<type> | XML nesnesinin kök etiketi. | |
name | ActionScript nesnesinin veri türünün adı. | |
base | ActionScript nesnesinin tanımlayıcı sınıfının mevcut üst sınıfı. ActionScript nesnesi bir sınıf nesnesiyse, değer Class olur. | |
isDynamic | ActionScript nesnesinin tanımlayıcı sınıfı dinamik olursa true ; aksi halde false olur. Class sınıfı dinamik olduğundan ActionScript nesnesi bir sınıf nesnesi olursa değer true olur. | |
isFinal | ActionScript nesnesinin tanımlayıcı sınıfı son olursa true ; aksi halde false olur. | |
isStatic | ActionScript nesnesi bir sınıf nesnesi veya yapıcı işlev olursa true ; aksi halde false olur. Bu özellik isStatic olarak adlandırılır çünkü, true olması durumunda factory etiketi içinde olmayan tüm etiketler statik olur. | |
<extendsClass> | ActionScript nesnesinin tanımlayıcı sınıfının her bir üst sınıfı için ayrı bir extendsClass etiketi vardır. | |
type | ActionScript nesnesinin tanımlayıcı sınıfının genişlediği üst sınıfın adı. | |
<implementsInterface> | ActionScript nesnesinin tanımlayıcı sınıfı veya herhangi bir üst sınıfı tarafından uygulanan her arabirime yönelik ayrı bir implementsInterface etiketi vardır. | |
type | ActionScript nesnesinin tanımlayıcı sınıfının uyguladığı bir arabirimin adı. | |
<accessor> | Erişimci, alıcı ve ayarlayıcı işlevleri tarafından tanımlanan bir özelliktir. | |
name | Erişimcinin adı. | |
access | Özelliğin erişim hakları. Olası değerler readonly , writeonly ve readwrite öğelerini içerir. | |
type | Özelliğin veri türü. | |
declaredBy | İlişkilendirilen alıcı ve ayarlayıcı işlevlerini içeren sınıf. | |
<constant> | Sabit, const ifadesiyle tanımlanan bir özelliktir. | |
name | Sabitin adı. | |
type | Sabitin türü. | |
<method> | Yöntem, sınıf tanımının bir parçası olarak bildirilen bir işlevdir. | |
name | Yöntemin adı. | |
declaredBy | Yöntem tanımını içeren sınıf. | |
returnType | Yöntemin döndürülen değerinin veri türü. | |
<parameter> | Bir yöntemin tanımladığı her bir parametre için ayrı bir parameter etiketi vardır. Bu etiket her zaman bir <method> etiketinin içindedir. | |
index | Parametrenin yöntemin parametre listesinde göründüğü sıraya karşılık gelen bir sayı. İlk parametre 1 değerine sahiptir. | |
type | Parametrenin veri türü. | |
optional | Parametre isteğe bağlıysa true ; aksi halde false olur. | |
<variable> | Değişken, var ifadesiyle tanımlanan bir özelliktir. | |
name | Değişkenin adı. | |
type | Değişkenin veri türü. | |
<factory> | ActionScript nesnesi bir sınıf nesnesi veya yapıcı işlev olursa, tüm örnek özellikleri ve yöntemleri bu etiketin içindedir. <type> etiketinin isStatic niteliği true olursa <factory> etiketinin içinde olmayan tüm özellikler ve yöntemler statik olur. Bu etiket·ActionScript nesnesi bir sınıf nesnesi veya yapıcı işlevse görüntülenir. |
Parametreler
value:* — Tür açıklaması istenen nesne. Herhangi bir ActionScript mevcut tüm türler, nesne örnekleri, uint gibi temel türler ve sınıf nesneleri de dahil olmak üzere bu yönteme iletilebilir.
|
XML — Bir parametre olarak iletilen nesne hakkında ayrıntı içeren bir XML nesnesi. Nesne hakkında aşağıdaki bilgiyi sağlar:
Not: |
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
package { import flash.display.Sprite; import flash.utils.describeType; public class DescribeTypeExample extends Sprite { public function DescribeTypeExample() { var child:Sprite = new Sprite(); var description:XML = describeType(child); trace(description..accessor.@name.toXMLString()); } } }
escapeMultiByte | () | işlev |
public function escapeMultiByte(value:String):String
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Girdi dizesinin atlamalı bir kopyasını, System.useCodePage değerine bağlı olarak UTF-8 veya sistem kod sayfasına göre kodlanmış halini döndürür. System.useCodePage kullanımı, yalnızca söz konusu eski kod sayfasını kullanan sistemlerde, çalışma zamanının, yerel kod sayfalarına kodlanan eski içeriğe erişmesine olanak sağlar. Örneğin, Shift-JIS
ile kodlanan Japonca veriler yalnızca Japonca varsayılan kod sayfası kullanan bir işletim sistemi üzerinde doğru olarak atlamalı veya atlamasız olur.
Parametreler
value:String — Atlamalı olacak dize.
|
String — Girdi dizesinin bir atlamalı kopyası. System.useCodePage true olursa, atlamalı dize sistemin kod sayfasına kodlanır. System.useCodePage false olursa, atlamalı dize UTF-8 olarak kodlanır. Örneğin, System.useCodePag false olursa, "Crüe" şeklindeki bir girdi dizesi tüm sistemlerde "Cr%C3%BCe" olarak atlanır. system.useCodePage true olursa ve sistem bir Latin kod sayfası kullanıyorsa, "Crüe" dizesi "Cr%FCe" olarak atlanır. Sistem 'ü' harfini içermeyen bir Latin olmayan kod sayfası kullanıyorsa, sonuç büyük olasılıkla "Cr?e" olacaktır. System.useCodePage true olarak ayarlıyken "Cr%C3%BCe" atlanmaması farklı sistemlerde farklı istenmeyen sonuçlar üretir (Latin sistemde "Crüe" gibi). Aynı şekilde, System.useCodePage false olarak ayarlıyken "Cr%FCe" atlanmaması, sistemin kod sayfasına bağlı olarak "Cre" veya "Cr?e" veya farklı varyasyonlar üretebilir.
|
getDefinitionByName | () | işlev |
public function getDefinitionByName(name:String):Object
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
name
parametresi tarafından belirtilen sınıftan bir sınıf nesnesine başvuru döndürür.
Parametreler
name:String — Bir sınıfın adı.
|
Object — name parametresi tarafından belirtilen sınıftan bir sınıf nesnesine başvuru döndürür.
|
Atar
ReferenceError — Belirtilen ada sahip genel tanım mevcut değil.
|
Örnek ( Bu örnek nasıl kullanılır? )
GetDefinitionByNameExample
sınıfını kullanır. Bu işlem, şu adımlar kullanılarak gerçekleştirilir:
- Turuncu rengin arka planına yönelik değişkenler ve 80 piksellik boyut bildirilir, bunlar daha sonra kareyi çizmede kullanılır.
- Yapıcı içinde, Class türünün bir
ClassReference
değişkeni Sprite'a atanır. - ClassReference öğesinin
instance
adı verilen bir örneği başlatılır. instance
başvuru olarak bir Sprite nesnesi olduğundan, Sprite için mevcut yöntemlerden biri kullanılarak bir kare çizilip görüntüleme listesine eklenebilir.
package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.utils.getDefinitionByName; public class GetDefinitionByNameExample extends Sprite { private var bgColor:uint = 0xFFCC00; private var size:uint = 80; public function GetDefinitionByNameExample() { var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class; var instance:Object = new ClassReference(); instance.graphics.beginFill(bgColor); instance.graphics.drawRect(0, 0, size, size); instance.graphics.endFill(); addChild(DisplayObject(instance)); } } }
getQualifiedClassName | () | işlev |
public function getQualifiedClassName(value:*):String
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Nesnenin tam nitelikli sınıf adını döndürür.
Parametreler
value:* — Tam nitelikli bir sınıf adının istenildiği nesne. Herhangi bir ActionScript mevcut tüm türler, nesne örnekleri, uint gibi temel türler ve sınıf nesneleri de dahil olmak üzere bu yönteme iletilebilir.
|
String — Tam nitelikli sınıf adını içeren dize.
|
İlgili API Öğeleri
getQualifiedSuperclassName | () | işlev |
public function getQualifiedSuperclassName(value:*):String
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
value
parametresinin belirttiği nesnenin taban sınıfının tam nitelenmiş adını döndürür. Bu işlev, describeType()
ile kıyaslandığında taban sınıfı adı almanın daha hızlı bir yolunu sağlar, ancak describeType()
tarafından sağlanan bilgilerin tümünü sağlamaz.
Bu işlevle bir sınıfın adını aldıktan sonra, sınıf adını getDefinitionByName()
işleviyle sınıf başvurusuna dönüştürebilirsiniz.
Not: value
parametresi bir veri türüyse describeType()
işlevi nesne hiyerarşilerini kullanırken bu işlev kendini örnek hiyerarşileriyle kısıtlar. Bir veri türü üzerine describeType()
çağrılması sınıf nesnesi hiyerarşini temel alan üst sınıfı döndürür; bu hiyerarşide tüm sınıf nesneleri Class öğesinden miras alır. Ancak getQualifiedSuperclassName()
işlevi sınıf nesnesi hiyerarşisini yok sayar ve üst sınıfı daha yakın örnek hiyerarşini temel alarak döndürür. Örneğin, String sınıfı nesnesi teknik olarak Class öğesinden miras almasına rağmen, getQualifiedSuperclassName(String)
çağrılması Object
döndürür. Diğer bir değişle, hem bir türün örneğini hem de türün kendisini kullandığınızda sonuçlar aynıdır.
Parametreler
value:* — Herhangi bir değer.
|
String — Bir tam nitelikli taban sınıfı adı veya yoksa null .
|
İlgili API Öğeleri
getTimer | () | işlev |
public function getTimer():int
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Göreceli saati hesaplamak için kullanılır. ActionScript 3.0'ı işleyen bir Flash çalışma zamanı için bu yöntem, ActionScript 3.0'ın (AVM2) Flash çalışma zamanı sanal makinesinin başlatılmasından itibaren geçen milisaniye sayısını döndürür. ActionScript s.0'ı işleyen bir Flash çalışma zamanı için bu yöntem, Flash çalışma zamanının başlatma işlemini başlatmasından itibaren geçen milisaniye sayısını döndürür. Flash çalışma zamanları, ActionScript işlemek için iki sanal makine kullanır. AVM1,·ActionScript 1.0'ı ve 2.0'ı çalıştırmak için kullanılan ActionScript sanal makinesidir. AVM2, ActionScript 3.0'ı çalıştırmak için kullanılan ActionScript sanal makinesidir. getTimer()
yönteminin davranışı, AVM1 ve AVM2 için farklıdır.
Bir takvim tarihi (zaman damgası) için Date nesnesine bakın.
Döndürürint — Çalışma zamanının başlatılmasından itibaren (ActionScript 2.0 işlenirken) veya sanal makinenin başlatılmasından itibaren (ActionScript 3.0 işlenirken) geçen milisaniye sayısı. Çalışma zamanı bir SWF dosyasını oynatmaya başlarsa ve daha sonra başka bir SWF dosyası yüklenirse, döndürme değeri ilk SWF dosyasının yüklendiği zamana göre olur.
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
GetTimerExample
sınıfını kullanır.
package { import flash.utils.getTimer; import flash.display.Sprite; public class GetTimerExample extends Sprite { public function GetTimerExample() { var duration:uint = getTimer(); trace("duration: " + duration); } } }
setInterval | () | işlev |
public function setInterval(closure:Function, delay:Number, ... arguments):uint
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9 |
Belirtilen bir aralıkta (milisaniye olarak) bir işlev çalıştırır.
setInterval()
yöntemini kullanmak yerine, belirtilen aralıkla, repeatCount
parametresi olarak 0 kullanarak (zamanlayıcıyı sonsuza kadar tekrarlamak üzere ayarlar) bir Timer nesnesi oluşturmayı deneyin.
setInterval()
çağrısını iptal etmek için clearInterval()
yöntemini kullanmak istiyorsanız, setInterval()
çağrısını bir değişkene (clearInterval()
işlevinin daha sonra başvuracağı) atadığınızdan emin olun. setInterval()
çağrısını iptal etmek için clearInterval()
işlevini çağırmazsanız, küme zaman aşımı kapatma işlevi çöp toplama işlemine tabi tutulmaz.
Parametreler
closure:Function — Çalıştırılacak işlevin adı. Tırnak işareti veya parantez içermez ve çağrılacak işlevin parametrelerini belirtmez. Örneğin, functionName kullanın, functionName() veya functionName(param) kullanmayın.
| |
delay:Number — Milisaniye cinsinden aralık.
| |
... arguments — Kapanış işlevine verilen isteğe bağlı bir argüman listesi.
|
uint — Zamanlanmış işlemin benzersiz sayısal kimliği. İşlemi iptal etmek için clearInterval() yöntemini çağırarak tanımlayıcıyı kullanın.
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
myRepeatingFunction()
çağırarak, bir zaman aralığı oluşturmak için setInterval()
yöntemini kullanır.
package { import flash.display.Sprite; import flash.utils.*; public class SetIntervalExample extends Sprite { private var intervalDuration:Number = 1000; // duration between intervals, in milliseconds public function SetIntervalExample() { var intervalId:uint = setInterval(myRepeatingFunction, intervalDuration, "Hello", "World"); } public function myRepeatingFunction():void { trace(arguments[0] + " " + arguments[1]); } } }
setTimeout | () | işlev |
public function setTimeout(closure:Function, delay:Number, ... arguments):uint
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9 |
Belirli bir işlevi belirli bir gecikmeden sonra (milisaniye olarak) çalıştırır.
Bu yöntemini kullanmak yerine, belirtilen aralıkla, repeatCount
parametresi olarak 1 kullanarak (zamanlayıcıyı yalnızca bir kere çalışmak üzere ayarlar) bir Timer nesnesi oluşturmayı deneyin.
setTimeout()
çağrısını iptal etmek için clearTimeout()
yöntemini kullanmak istiyorsanız, setTimeout()
çağrısını bir değişkene (clearTimeout()
işlevinin sonradan başvuracağı) atadığınızdan emin olun. setTimeout()
çağrısını iptal etmek için clearTimeout()
işlevini çağırmazsanız, küme zaman aşımı kapatma işlevi çöp toplama işlemine tabi tutulmaz.
Parametreler
closure:Function — Çalıştırılacak işlevin adı. Tırnak işareti veya parantez içermez ve çağrılacak işlevin parametrelerini belirtmez. Örneğin, functionName kullanın, functionName() veya functionName(param) kullanmayın.
| |
delay:Number — İşlev çalıştırılana kadar yaşanan (milisaniye cinsinden) gecikme.
| |
... arguments — Kapanış işlevine verilen isteğe bağlı bir argüman listesi.
|
uint — Zamanlanmış işlemin benzersiz sayısal kimliği. İşlemi iptal etmek için clearTimeout() yöntemini çağırarak tanımlayıcıyı kullanın.
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
setTimeout()
yöntemini kullanır.
package { import flash.display.Sprite; import flash.utils.*; public class SetTimeoutExample extends Sprite { private var delay:Number = 1000; // delay before calling myDelayedFunction public function SetTimeoutExample() { var intervalId:uint = setTimeout(myDelayedFunction, delay, "Hello", "World"); } public function myDelayedFunction():void { trace(arguments[0] + " " + arguments[1]); } } }
unescapeMultiByte | () | işlev |
public function unescapeMultiByte(value:String):String
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Girdi dizesinin, System.useCodePage değerine bağlı olarak sistem kod sayfasından veya UTF-8'den kodu çözülmüş atlamasız bir kopyasını döndürür. System.useCodePage kullanımı, yalnızca söz konusu eski kod sayfasını kullanan sistemlerde, çalışma zamanının, yerel kod sayfalarına kodlanan eski içeriğe erişmesine olanak sağlar. Örneğin, Shift-JIS
ile kodlanan Japonca veriler yalnızca Japonca varsayılan kod sayfası kullanan bir işletim sistemi üzerinde doğru olarak atlamalı veya atlamasız olur.
Parametreler
value:String — Atlanmayacak atlanmış dize.
|
String — Girdi dizesinin bir atlamasız kopyası. System.useCodePage true olursa, atlamalı dize kodu sistemin kod sayfasından çözülür. System.useCodePage false olursa, atlamalı dize kodu UTF-8 olarak çözülür. Örneğin, girdi dizesi "Crüe" ise ve System.useCodePage false olursa, sonuç tüm sistemlerde "Crüe" olur. System.useCodePage true olursa ve girdi dizesi "Cr%FCe" ise ve sistem bir Latin kod sayfası kullanıyorsa, sonuç yine "Crüe" olur. System.useCodePage true olarak ayarlıyken "Cr%C3%BCe" atlanmaması farklı sistemlerde farklı istenmeyen sonuçlar üretir (Latin sistemde "Crüe" gibi). Aynı şekilde, System.useCodePage false olarak ayarlıyken "Cr%FCe" atlanmaması, sistemin kod sayfasına bağlı olarak "Cre" veya "Cr?e" veya farklı varyasyonlar üretebilir.
|
Tue Jun 12 2018, 01:25 PM Z