Хочу вам рассказать как можно сделать таблицу рекордов для игры на as3, с сохранением результатов на своем сервере. Я сам еще новичек, очень долго ковырял много разных уроков, чтобы у меня наконец получилась рабочая таблица рекордов. Сразу говорю, что код кривой, но в нем все работает=) Строго не судите, пишу свой первый урок. Возможно кому то пригодится.
Вот так она будет выглядеть:
Начнем:
1)Создаем базу данных, а потом таблицу score_score c 3 столбцами:
первый назовем id тип: INT длина значения : 10 и ставим галочку auto increment
второй uid тип: INT длина значения : 10
третий score тип: INT длина значения : 3
Сюда у нас будут записываться id и результаты игроков.
2) Теперь создадим файлик get_score.php :
Код: Выделить всё
<?php$mysql_host='localhost';$mysql_user='пользователь БД';$mysql_pass='пароль БД';$mysql_base='название БД';$mysql_table='score_score'; //тут название нашей таблицы$uid=$_GET['uid'];$auth=$_GET['auth']; $api_id=2626409;$api_secret='K520ZVsdB0VgOCMGFiBv'; $auth2=md5($api_id.'_'.$uid.'_'.$api_secret);if ($auth==$auth2){mysql_connect($mysql_host,$mysql_user,$mysql_pass);mysql_selectdb($mysql_base);mysql_query('SET names "utf-8"');$sql=@mysql_query('SELECT * FROM `'.$mysql_table.'` ORDER BY `score` DESC LIMIT 100'); //тут пишем сколько рекордов выводитьecho '<?xml version="1.0" encoding="utf-8" ?>';echo '<response>';for ($i=0;$i<mysql_num_rows($sql);$i++){echo '<user>';$res=mysql_fetch_array($sql);echo '<uid>'.$res['uid'].'</uid>';echo '<score>'.$res['score'].'</score>';echo '</user>';}echo '</response>';}else{echo 'error';} ?>
Код: Выделить всё
<?php$mysql_host='localhost';$mysql_user='пользователь бд';$mysql_pass='пароль бд';$mysql_base='название БД';$mysql_table='score_score'; //название нашей таблицы$uid=$_GET['uid'];$score=$_GET['score'];$auth=$_GET['auth']; $api_id=тут id приложения;$api_secret='здесь защищенный ключ';$auth2=md5($api_id.'_'.$uid.'_'.$api_secret); if ($auth==$auth2){mysql_connect($mysql_host,$mysql_user,$mysql_pass);mysql_selectdb($mysql_base);mysql_query('SET names "utf-8"');$sql=@mysql_query('SELECT * FROM `'.$mysql_table.'` WHERE `uid`='.$uid.'');$num=mysql_num_rows($sql);if ($num<1){mysql_query('INSERT INTO `'.$mysql_table.'` (`uid`,`score`) VALUES ('.$uid.','.$score.');') or die(mysql_error());echo 'new';}else{mysql_query('UPDATE `'.$mysql_table.'` SET `score`='.$score.' WHERE `uid`='.$uid.'') or die(mysql_error());echo 'exists';}}else{echo 'error';} ?>
Создаем кнопки:
btn2 - это будет кнопка для записи рекорда
next12 - перелистывает игроков вправо
back12 - перелистывает игроков влево
Теперь сам код:
Код: Выделить всё
import vk.APIConnectionimport flash.display.Loader;import flash.net.URLRequest;import vk.*;import vk.api.*;import fl.containers.UILoader;//delete var photo:Loader= new Loader(); var flashVars:Object=stage.loaderInfo.parameters as Object;var VK:APIConnection=new APIConnection(flashVars); var host:String = 'http://site.ru/api'; //здесь пишем путь к папке с файлами get_score.php и score.php var xml:XML = new XML();var uids1:String = '';var auth_key:String=flashVars['auth_key'];this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);getScores(); function getScores():void{ var loader:URLLoader = new URLLoader(); loader.load(new URLRequest(host+'/get_score.php?uid='+flashVars["viewer_id"]+'&auth='+auth_key)); loader.addEventListener(Event.COMPLETE,scoreLoaded);} function scoreLoaded(e:Event):void{ xml = new XML(e.target.data); for (var i:uint;i<xml..user.length();i++) { if (i!=xml..user.length()) { uids1+=xml..user[i].uid+','; } else { uids1+=xml..user[i].uid; } } getProfiles();} var massivfotok:Array=new Array; var massivimen1:Array=new Array; var massivimen2:Array=new Array; var massivimen3:Array=new Array; var counter:int=0; next12.addEventListener(MouseEvent.CLICK, nextv); function nextv(Event:MouseEvent) { counter=counter+10; vivodinfa(); } back12.addEventListener(MouseEvent.CLICK, backv); function backv(Event:MouseEvent) { counter=counter-10; vivodinfa(); } function getProfiles():void{ wrapper.external.api('getProfiles',{uids:uids1,fields:'first_name,last_name,photo'},ProfilesLoaded,APIError);} function ProfilesLoaded(data:Object):void{ var count = data.length; for (var i=0; i<count; i++) { massivfotok[i] = data[i]['photo']; massivimen1[i] = data[i]['first_name']; massivimen2[i] = data[i]['last_name']; massivimen3[i] = data[i]['uid']; } vivodinfa(); } function vivodinfa():void{ // массив блоков с информацией о пользователях var usersBoxArray = new Array(); // стиль текста var textformat:TextFormat = new TextFormat(); textformat.align = TextFormatAlign.CENTER; textformat.font = 'Tahoma'; textformat.size = 9; textformat.color = 0xffffff; for(var i:int=0;i<10;i++) { var user_box = new MovieClip; // рамка блока user_box.graphics.lineStyle(5, 0x000000); user_box.graphics.drawRect(0,0,72,100); // заливка блока user_box.graphics.beginFill(0x336699); user_box.graphics.drawRect(1,1,70,98); user_box.graphics.endFill(); user_box.x = 9 + i * 79; user_box.y = 620; user_box.buttonMode = true; user_box.useHandCursor = true; user_box.mouseChildren = false; // добавляем фото var user_photo:UILoader = new UILoader ; user_photo.autoLoad = true; user_photo.scaleContent = false; user_photo.source = massivfotok[counter+i];; user_photo.move(11,10); user_box.addChild(user_photo); // добавляем имя var user_name_tf:TextField = new TextField ; user_name_tf.width = 80; user_name_tf.height = 40; user_name_tf.wordWrap = true; user_name_tf.defaultTextFormat = textformat; user_name_tf.appendText( massivimen1[counter+i]+'\n'+ massivimen2[counter+i]+'\n' +xml..user[i].score); user_name_tf.x = 0; user_name_tf.y = 60; user_box.addChild(user_name_tf); usersBoxArray.push(user_box); addChild(usersBoxArray[i]); // записываем id пользователя в массив usersBoxArray[i].uid = massivimen3[counter+i]; // клик по блоку usersBoxArray[i].addEventListener(MouseEvent.CLICK, function(e:MouseEvent){ navigateToURL(new URLRequest('http://vkontakte.ru/id' + e.currentTarget.uid)); trace('http://vkontakte.ru/id' + e.currentTarget.uid); }); }} function APIError(data:Object):void{ result_txt.text=data.error_msg;} btn2.addEventListener(MouseEvent.CLICK,postScore); function postScore(e:MouseEvent):void{var loader:URLLoader = new URLLoader();var request:URLRequest = new URLRequest(host+'/score.php');var variable:URLVariables = new URLVariables();variable['uid']=flashVars['viewer_id'];variable['score']=scoreText.text //сюда пишем переменную ваших очковvariable['auth']=auth_key;request.data= variable;loader.load(request);loader.addEventListener(Event.COMPLETE,scorePosted);} function scorePosted(e:Event):void{ scoreText.appendText(' OK'); //сюда пишем переменную ваших очков getScores();}
Вот ссылочка на Api Vk:
http://depositfiles.com/files/ltdehwc7q
Всем желаю успехов.