Бях започнал да публикувам видео уроци за Flex във Video Tutorials и ще продължа да го правя, но с една основна разлика :
Първо ще бъдат качвани на новият сайт ( LearnWithFun ), който ще бъде пуснат в пълна експлоатация в най-скоро време ( до дни ) и ако потръгне добре, ще бъде преместен на собствен домейн.
Може да посетите горепосочения сайт и да разгледате най-различните материали ( които нерпестанно ще нарастват ) и да дадете вашия принос за него.
Видео уроци за Flex : тук може да намерите видео уроците свързани с Flex.
След националния кръг по Информационни Технологии се оказа, че съм с 5 и 50 за СУ.
Сега остава да излязат и официалните резултати, които ще чакам с нетърпение.
А относно самото съзтезание ще коментирам в отделна публикация
edit : Излязоха резултатите и имаме 5 и 50 със съотборника ми.
Може да видите в коментара към публикацията линк към крайното класиране и към нашия проект.
Събота – ТУ, а в неделя – СУ.
Стискайте палци, защото предварителните изпити никога не са приятни !
От мен – успех на всички кандидат-студенти в КСК ‘09.
п.с. Дано 10та в СУ да е анализ.
Adobe са пуснали интересна статия, свързана с MMORPG игрите и Flex.
СТАТИЯТА
Пише интересни неща и се препоръчва electro-server за сървърното решение на играта.
Лично аз се бях мъчил да напиша подобие на Socket Server, но не е толкова лесно, колкото изглежда, особено ако не се занимаваш с такъв вид програмиране или пък още по-малко с JAVA.
Освен JAVA, за Socket Server може да се ползва и PHP, C++, C#, Python, но за сега повечето готови комерсиални сървари са писани на JAVA.
А за тези, които ще попитат какво е това Socket Server -> това е сървърът, чрез който дадено флаш приложение става „multiplayer“ -> чатове, игри и т.н.
Препратки :
Wiki->Socket Server
Ако сте пробвали да пращатe през Flex нещо на кирилица, ползвайки AMFPHP, със сигурност сте се натъкнали на гаден проблем. Кирилицата не се изобразява!
Всичко се оправя, като в gateway.php в AMF папката на 127ми ред смените
127
| $gateway->setCharsetHandler(каквото и да има тук); |
със
127
| $gateway->setCharsetHandler("iconv", "UTF-8", "UTF-8"); |
или енкодинг подходящ за вашата база данни.
На скоро ми се наложи да използвам AMF формата, за да прехвърлям данни от Flex към PHP към DataBase и октрих, че с AMFPHP всичко става по-лесно, по-бързо (и като писане и като прехвърляне на данни)
Може да прочетете тук : AMFPHP SITE по-обстойна информация какво представлява.
Ето и прост пример как да си нагласите AMFPHP-то и да тествате :
1.Изтеглете нужните файлове от сайта и разархивирайте.Трябва да имате папка amfphp и вътре services, etc.
2.Сложете цялата папка в директорията на локалния хост.
3.Връзката от FLex към AMFPHP ще се прави чрез gateway.php !
4.Отворете папката services и създайте нов PHP файл със следното съдържание :
<?php
class AMFTestService {
public function __construct() {
define("MySQL_HOST", "localhost"); // server
define("MySQL_USER", "user"); // user
define("MySQL_PASS", "pass"); // pass
define("MySQL_BASE", "database"); //database
$db=@mysql_connect(MySQL_HOST, MySQL_USER, MySQL_PASS); // connectiong
@mysql_query("set names utf8", $db); // za kirilicata ako prai problemi
@mysql_select_db(MySQL_BASE); // selektirane na bazata danni
}
//pomo6tna funkciq, vru6ta masiv ot obekti za po-lesna obrabotka vuv flex
private function _handleQuery($query)
{
$res = mysql_query($query)or die(mysql_error());
$ret = array();
while($obj = mysql_fetch_object($res)){
$ret[] = $obj;
}
return $ret;
}
//funkciqta, koqto se vika ot Flex
function getSomeInfo()
{
$query = "SELECT pole FROM bazadanni";
return $this->_handleQuery($query);
}
}
?>
Както виждате това е PHP Class със следните методи :
__construct() -> конструктор метода на класа. В него се прави връзка към базата данни ( препоръчително ). Този метод се изпълнява всеки път когато се вика този клас.
private function _handleQuery($query) -> Функцията обработва заявката и връща масив от обекти, които във Flex директно се слагат във ArrayCollection.
Хубаво е да се използва, ако чрез заявката ще вземете някаква информация без да правите проверки и т.н.
function getSomeInfo() -> Тази функция се вика директно от Flex и връща директно във Flex масивът със обекти от базата данни ! Няма нужда да си цапате ръцете с XML ! Директно викане от Flex и взимане на променливи от Flex.
Следва да настроим клиента!
Създайте си нов Flex проект и сложете следният код, който е добре коментиран :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
initialize="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.collections.ArrayCollection;
// v tazi promenliva zadavame putq do gateway.php failyt, koito sluji za vruzka !
private var AMFGatewayLocation:String = "http://localhost/amfphp/gateway.php";
//promenlivate gateway 6te sudurja obekt NetConnection,
//chrez koito shte se osy6testvqva vikaneto i svurzvaneto s AMFPHP
private var gateway:NetConnection;
// normalen ArrayCollection, koito 6te sluji za DataProvider na DataGrid componenta
[Bindable]
private var dp:ArrayCollection;
//init funkciqta, koqto se izvikva pri startirane na prilojenieto
private function init():void
{
gateway = new NetConnection(); // suzdavame nova instanciq na NetConnection()
gateway.objectEncoding = ObjectEncoding.AMF3; //tuk kazvame objectEncoding-a da e vuv AMF vid. Ne e zaduljitelno, no e preporu4itelno
gateway.connect(AMFGatewayLocation); // polzvame metoda connect() s parametur putq do gateway.php
//vsi4ko e gotovo ! vurzani sme kym AMFPHP-to
}
//click event handler na butona
//izvikvame call metoda na NetConnection obekta
private function callAMF(e:MouseEvent):void
{
gateway.call("AMFTestService.getSomeInfo",
new Responder(onResult,onFault));
/*
* purviqt parametur e imeto na klasa, posledvan ot to4ka i imeto na funkciqta, koqto iskame da izvikame
* vtoriqt parametur predstavlqva nov Responder obekt ili nakratko -> onResult e pri rezultat, onFault e ako e vuzniknala gre6ka
* tretiqt parametur ( ne e vuveden ) predstavlqva syotvetno parametrite, koito se pra6tat kym AMFPHP, ako ima takiva
Primer :
ako imame v AMF Class-a funkciq :
function updateUser($id,$username)
{
$query = "UPDATE users SET username ='$username' WHERE id = '$id';
$res = mysql_query($query);
if($res) return true; else return false;
}
to togava call metoda 6te izglejda taka :
gateway.call("AMFTestService.getSomeInfo",
new Responder(onResult,onFault),
idInput.text,
userNameInput.text);
kudeto idInput i userNameInput sa fiktivni poleta
*/
}
// funkciqta, koqto se izpylnqva pri vurnat rezultat ot klasa
private function onResult(data : Array):void
{
dp = new ArrayCollection(data);
//suzdavame nov ArrayCollection sus vurnatiqt masiv
//dp-to e vurzano kym DataGrid-a, a dataField poletata nosqt su6tite imena kato imenata na poletata v bazata danni !
//udobno, nali :)
}
//ako vuznikne gre6ka, 6te ni signalizira
//preporu4vam vi vinagi da polzvate tozi sintaksis na funkciqta za gre6ka :
private function onFault(fault : Object):void
{
Alert.show(fault.description);
}
]]>
</mx:Script>
<mx:ApplicationControlBar dock="true" width="100%">
<mx:Button label="Call" click="callAMF(event)" />
</mx:ApplicationControlBar>
<mx:DataGrid dataProvider="{dp}" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn dataField="someFieldName" />
</mx:columns>
</mx:DataGrid>
</mx:Application>
Това е всичко за тази публикация. Нататък ще пускам и други хитрини за AMFPHP!
Quake Live
Сайтът сам говори за себе си
Приятна игра.
Скандинавците имат доста интересен подход за IE6 :
http://blog.wired.com/business/2009/02/norwegian-websi.html
Ако се подхване нещо такова в България ще бъде доста полезно !
Най-простият начин :
Да приемем, че скрипта се намира в localhost и се казва script.php.
Flex-a представлява TextInput поле с id myText, бутон със click event -> send(event) и httpservice деклариран по следният начин :
1
2
3
4
5
6
| <mx:HTTPService
id="phpRequest"
resultFormat="text"
url="http://localhost/script.php"
result="onResult(event)"
fault="onFault(event)"> |
Целта е да пратим написаното в myText до PHP.
Имаме следният код :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| private function send(e:MouseEvent):void
{
var sendObject:Object = new Object(); // pravim obekt
sendObject.textZaPrashtane = myText.text; // pravim promenliva na tozi obekt na ime textZaPrashtane i sus stoinost myText.text
phpRequest.send(sendObject); // prashtame kym scripta
}
private function onResult(e:flash.rpc.ResultEvent):void
{
Alert.show(e.result.toString());
}
private function onFault(e:flash.rpc.FaultEvent):void
{
// pri greshka
} |
И съответният PHP скрипт :
1
2
3
4
| <?php
$promenliva = $_POST['textZaPrashtane'];
echo $promenliva;
?> |
Ако искате да пращате още неща към PHP-то, начинът е : sendObject.oshteNeshto = „oshte nesheto za prasthane“ и така колкото искате.
Може да гледате видео уроци правени от мен, свързани с Flex на Video Tutorials .
Надявам се да ви харесва, а ако правя нещо интересно ще го качвам като обяснение и тук.