Создание браузерных игр: работаем в связке php и flash
Всем доброго времени суток. Сегодня мы поговорим на тему веб-мастеринга и создания игр. Мы создадим мини-игру на flash и попробуем связать ее с php. Сразу скажу - статью и код писал полностью САМ, статья для опытных веб-мастеров. Вот наши конкретные задачи на сегодня: -- Реализовать мини-игру для примера -- Таблица рекордов - основная цель -- Работать в связке as3(flash) и php.
Вот такие не хитрые вещи мы разберем. Передача от сервера (php) клиенту flash и обратно. Напомню - главная цель - php и flash, а игра лишь для примера. Таблица рекордов будет полезна для любых flash игр, так же вы сможете понять сам механизм взаимодействия flash и php. Мини-вступление Разрабатывая игру на flash, вы столкнетесь с проблемой передачи данных от клиента к серверу. Я предлагаю вам вполне стандартное решение проблемы, читайте статью и все станет понятно
Приступаем. Создаем Новый ActionScript3.0 документ в вашем Flash-редакторе. Шаг I. Рисуем компоненты Для примера создадим простую игру, где нужно кликать по квадратику. Первое. Создаем "тексты": score текст со значением 0, пустой текст priem. Остальные тексты не обязательны. Второе. Создаем компонент TextInput с названием login (догадались? сюда будем вводить логин) Третье. Рисуем квадратик, конвертируем в муви-клип(символ) с названием ene. Четвертое. Создаем компонент button с названием кнопка.
Смотрим рисунок, сверяем.
Шаг II. Пишем код для игры. Код очень прост и создает лишь перемещение квадрата и увеличение очков по клику. Этот код разбирать не будем, все его составляющие прокомментированы.
Code
/* По таймеру перс перемещается на рандомное расстояние */ // первая переменная задает время таймера, вторая в миллисекундах продолжительность интервала var sc = 0; //очки: 0 var fl_SecondsToCountDown:Number = 100000; // пусть это число для примера. 100000 секунд перс будет перемещаться на рандомное расстояние
var fl_CountDownTimerInstance:Timer = new Timer(1000, fl_SecondsToCountDown); fl_CountDownTimerInstance.addEventListener(TimerEvent.TIMER, fl_CountDownTimerHandler); fl_CountDownTimerInstance.start();
function fl_CountDownTimerHandler(event:TimerEvent):void { //перемещение рандомное var massiv:Array= [0,5,10,15,20]; var random:int= massiv[int(Math.random()*massiv.length)];
var massiv2:Array= [0,5,10,15,20]; var random2:int= massiv2[int(Math.random()*massiv2.length)];
function fl_MouseClickHandler(event:MouseEvent):void { //добавляем очки sc++; score.text = sc; }
Шаг III. Пишем код для flash передача/возвращение видоизмененных данных на сервер. Сначала посмотрите код, чтобы вникнуть. Код добавить туда же, куда и игровой листинг (Слой1 например).
Code
/* отправка и прием даных То, ради чего мы все здесь собрались. Создаем метод URLVariables для переменной variables далее с помощью "точки" можно указать сколько угодно переменных variables.variable1 = 5; variables.variable2 = 100500; variables.ololo = "ololoevich"; */ // Посылаем в скрипт переменные: логина и score(кол-во накликанных очков) кнопка.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler_2); //по клику кнопки function fl_MouseClickHandler_2(event:MouseEvent):void { var variables:URLVariables = new URLVariables(); variables.score = score.text; // мы хранили кол-во очков в score(.text через текст) variables.login = login.text; // мы взяли логин из текстового поля // Адрес скрипта var request:URLRequest = new URLRequest("send.php"); request.data = variables; //передача данных.переменные которые надо отправить request.method = URLRequestMethod.POST; //передача данных.метод get или пост. В php скрипте Принимаем $_GET[] $_POST[] // Загружаем var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, loaded); //по событию COMPLETE loader.load(request); // отправили //а тут уже ПРИНИМАЕМ ИЗМЕНЕННЫЕ в php скрипте данные function loaded(event:Event):void { trace(loader.data); // ВСЯ табляца очков priem.text = loader.data //подзагружаем ее в текст } }//} (клик кнопки)
Код я прокомментировал, но расскажу еще раз. Во flash есть класс URLVariables для приема и отправки внешних данных. Условно говоря у нас на сервере в одной папке лежат test.swf и test.txt. Для получения доступа к текстовому файлу(например, чтобы прочитать его данные и изменить) нужно использовать URLVariables. То же самое и с php файлами. Однако тут больше возможностей. Мы можем отправить переменную из флеш, видоизменить в php (например было a = 0;, php сделал a = 100;) данные и вернуть флешу измененную переменную.
У нас в скрипте мы отправляем по клику (на кнопку)в php две переменных: score и login. Там Эти переменные должны будут занестись в Mysql базу данных, php скрипт сделает выборку из бд и отправит всю таблицу рекордов прямо во flash! Далее выводим priem.text = loader.data //подзагружаем ее в текст
Шаг IV. Php обработка и запись в Mysql. Первое. Создаем таблицу в вашей бд game. Создаем 3 поля: (как на картинке id [not null, auto_increment, первичный ключ, int(11)] score [varchar(11) not null, по умолчанию ноль] login [text]) Теперь у нас есть база данных - место, куда будут записаны данные (таблица рекордов) Php код я решил написать в форме класса, но это не суть важно. Самое главное запомните: принимаются данные с помощью $_POST['имя_отправляемой_переменной'];
Code
<?php /* Обернем наш php в класс Данные получаем из $_POST['score'] и $_POST['login'] Наша задача - занести в Mysql данные и затем вывести их с помощью echo */ class SendAndGet {
public function Mysql () { //функция подключения к бд $lnk = mysql_connect('localhost', '_test', '123456') or die ('Not connected : ' . mysql_error()); //замените _test на логин,а 123456 на пароль.
// сделать текущей базой данных mysql_select_db('test', $lnk) or die ('Can\'t use db : ' . mysql_error()); //замените test на вашу бд
}
public function Insert () { //функция записи в бд if ($this->score != null && $this->login != null) { $this->Mysql(); $ins = mysql_query("INSERT into `game` (login,score) VALUES ('$this->login','$this->score')"); } }
public function Select () { //функция выборки данных $this->Mysql(); $q = mysql_query("SELECT * FROM `game`"); while ($arr = mysql_fetch_assoc($q)) { echo "Login $arr[login] Score $arr[score] "; //вывод на экран через цикл } }
function __construct() { //get - получение переменных mysql - подключение к бд, insert - запись в бд, select - извлечение //метод _construct удобен, когда не нужно объявлять 10 раз функции через $object. $this->Get(); $this->Mysql(); $this->Insert(); $this->Select(); }
}
$object = new SendAndGet; //создаем объект
?>
Вот так мы создали нашу таблицу рекордов и научились работать в связке flash+php. В комментариях пишите, на какую тему писать статьи, желательно это связанное с php. Плюсы принимаются в репу, а вопросы задаются в комментариях или в лс. Исходники: RgHost Мануалы: Хелп по urlvariablesКлассы в php
Категория: Создание игр | Добавил: gmmmm (31 Июля 2012)
| Автор: Михаил
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Создание браузерных игр: работаем в связке php и flash», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
Я вообще в разные онлайн-игры люблю играть, часто провожу время за компьютером. А в последнее время мне очень нравится играть в флеш-игры. Сейчас "подсела" на "Папа Луи 3: Когда атакует мороженое". Я еще брату своему показала эту игрушку, так он тоже теперь только в нее играет))) Еще эта игра подходит как для девочек, так и для мальчиков, интересно будет всем) В общем, отличная игрушка.
А почему не делаешь нормальный сервер на сокетах? Одно из основных преимуществ флеша перед хтмл5 - наличие нормальных инструментов для создания реал-тайм игры.
Сделал онлайн игру для 2-ух человек(типа многопользовательская). php+flash. Если надо сделать урок, как создать такую игру - пишите в ответах к этому комментарию.
да реал тайм. Один игрок передвигает квадрат и в это же время другой передвигает квадрат. На самом деле это не сложно реализовать. Использовал "простой таймер" и URLVariables. Значения x,y хранил в бд.