Пятница, 15.11.2024, 07:50:23

OKC-08-2 форум

внимание, некоторые разделы не видны гостям,

пожалуйста, пройдите регистрацию...

Главная



и вот он-ученик | статус"Гости" | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Borizzz  
Flash програмирование, создание простейших игр.
okc-08-2Дата: Понедельник, 19.01.2009, 14:41:29 | Сообщение # 1
Директор/враг общества (Вель)
Группа: Администраторы
Сообщений: 177
Репутация: 0
Статус: Offline
Тут я расскажу о принципах рисования оригинальных рисунков в adobe Flash, создание простейших игр, создание простейших анимаций, програмирование чата и т.д. Для этого необходимо иметь софт Macromedia Flash MX 2004 и новее, т.к. программа занимает не мало места- я не могу загрузить её на сайт, по этому прийдется искать самим.
Прикрепления: 6679855.jpg (10.2 Kb)


Если Вам понравился сайт или какая либо информация на нем, то, пожалуйста, пройдите регистрацию...
 
okc-08-2Дата: Понедельник, 19.01.2009, 15:27:32 | Сообщение # 2
Директор/враг общества (Вель)
Группа: Администраторы
Сообщений: 177
Репутация: 0
Статус: Offline
В данном мануале мы сделаем игру по типу Battle city с денди. скачать исходник fla

Игрок управляет танком, смысл игры - уничтожить определенное количество танков противника и при этом не дать им уничтожить свою базу. Также в игре можно будет разрущать стенки.

Используемые функции:

Все мувики в этом примере мы будем добавлять на сцену "аттачем"(attach) - эта функция берет символ из библиотеки и добавляет его на сцену, также она позволяет присвоить объекту необходимые свойства(_alpha; _x; _y и т.д.) при добавлении на сцену.

attachMovie("Movie_name", "new_movie_name", Depth, {_x:100, _y:100, _alpha:50});

"Movie_name"- имя клипа из библиотеки который вы хотите добавит на сцену

"new_movie_name"- имя клипа под которым он будет добавлен на сцену

Depth - "глубина" добавленного клипа.

В фигурных скобках - через запятую, можно указывать свойства клипу который будет добавлен на сцену.

При проверки столкновений танчика с стенками - будем использовать функцию hitTest() и getBounds(), первой функцией мы проверяем столкновения, а вторая функция нам понадобиться чтобы узнать с какой стороны "ударился" объект. Более подробно эти функции мы рассмотрим ниже. Также мы будем использовать и другие функции, которые я описывал в предыдущих мануалах. Код для объектов будет написан внутри них, для того чтобы он выполнялся постоянно - мы будем использовать 2х кадровый цикл. В 1ом кадре будет находиться код для объекта который он должен выполнять, а во втором кадре, функцией gotoAndPlay(1) мы сделаем постоянное выполнение 1го кадра.

Объекты:

o_enemy- мувик врага, состоит из 3х кадров, в 1ом кадре находиться код присваивающй танку имя при создании и различные переменные. 2ой кадр содержит основной код объекта(движение, стрельба и етц.) . 3ий кадр содержит функциюgotoAndPlay(2), которая заставляет постоянно выполняться 2ой кадр с кодом.

o_player - мувик танчика игрока, как и мувик врага содержит 3 кадр.

o_shot -мувик выстрела игрока. содержит 2 кадра.

o_shot_e - мувик выстрела врага -2кадра.

o_explosion- мувик взрыва, который мы будет аттачить на x,y пули, когда она столкнется с вражеским танком или стеной.

o_wall- мувик стены, состоит из 5 кадров. 1й кадр - код выполняющийся при создании, и картинка целой стены. Кадры2-5 - разрушенные куски стены. Я расположил куски стены в такой последовательности: 2-левый кусок; 3-нижний кусок; 4-правый кусок; 5-верхний кусок;

o_wall_frame- объект в котором будут содержаться все мувики стены, из которых будет состоять уровень.

o_objects- в этом объекте будут находиться мувики танков врагов и мувик o_wall_frame.

o_base - мувик базы игрока.

Слои:

Text -на этом слое будут размешаться текстовая информация и некоторые функции.

Objects- слой для мувикаo_objects, в котором находятся мувики o_wallи мувики врагов.

Player - слой для танчика игрока.

Ну вот вроде бы и все что нам понадобиться. Для удобства следует включить сетку, т.к у меня все объекты размером 32*32 я устанавливаю сетку с таким же размером ячеек.

Начало работы:

Для начала создадим объект пули игрока, в свойствах мувика ставим галочки на"Export for ActionScript" и "Export in first frame". В полеIdentifer - можно задать название по которому мы будем вызывать мувик из библиотеки. Данную операцию следует производить со всеми клипами которые мы будет аттачить.

В первом кадре вписываем код:

//Движение пули в направлениии _rotation с скоростью 7 пикселей.
_y -= 7*Math.sin(_rotation*(Math.PI/180));
_x -= 7*Math.cos(_rotation*(Math.PI/180));

Во втором кадре функцией gotoAndPlay(1), заставляем постоянно выполняться 1ый кадр.
//Кадр с функцией, с помощью которого будет постоянно выполняться 2ой кадр.
gotoAndPlay(1);

Теперь создадим мувик танчика игрока. В мувике будет 3 ключевых кадра. В первом вписываем 2 переменные для стрелбы:

//Переменная которую мы будем присваивать к названию пули
bullet_num = 0;
//Переменная необходимая для создания задержек между выстрелами
bullet_time = 0;

Во втором кадре будет код движения танчика и вызова мувика пули из библиотеки(выстрел):

//**//Код управления
if (Key.isDown(Key.UP)) {
_y -= 3;
_rotation = 0;
} else if (Key.isDown(Key.DOWN)) {
_y += 3;
_rotation = 180;
} else if (Key.isDown(Key.LEFT)) {
_x -= 3;
_rotation = 270;
} else if (Key.isDown(Key.RIGHT)) {
_x += 3;
_rotation = 90;
}

//**//Код стрелбы
if (Key.isDown(Key.SPACE) && (getTimer()-bullet_time>1500)) {
//Аттачим пулю из библиотеки и присваиваем ей стартовые координаты и направление.
_root.attachMovie("o_shot", "shot"+bullet_num, bullet_num+400, {_x:this._x, _y:this._y, _rotation:this._rotation+90});
bullet_num++;

//**//Обновляем таймер стрельбы
bullet_time = getTimer();
}

В третьем кадре функцией делает постоянное выполнение 2го кадра.

//Кадр с функцией, с помощью которого будет постоянно выполняться 2ой кадр.
gotoAndPlay(2);

Перед тем как создавать мувик стены, в кадр слоя Техт вписываем код:

//Переменная которая присваивается к имени мувика стены при создании
wall_count=0;

Теперь создадим мувик стены, как я уже писал выше - он состоит из 5 ключевых кадров. в 1ом кадре вписываем код, который будет автоматически присваивать ему имя при создании:

stop();
//Присваиваем мувику имя при создании
_name = "wall"+_root.wall_count;
_root.wall_count++;

Затем создаем пустой мувикo_wall_frame, и размешаем в него мувики o_wall, так, как вы хотите, чтобы выглядел ваш уровень. Для того чтобы сделать уровень более красочным, создать еще несколько слоев и разместить на них различные украшательства, типа снега и леса.

После этого создаем пустой мувик o_objectsи в него вставляем мувикo_wall_frame, затем размещаем мувик o_objects на сцене и присваиваем им одноименные имена.

Важно чтобы центр мувика o_wall_frame и o_objects находился в верхнем левом углу основной сцены, это необходимо для правильного расчета координатов при столкновениях.

.

Теперь когда у нас есть уровень - нужно сделать столкновение танчика с стенками и разрушение стенок пулями.

Для начала сделаем столкновение танка с стенками. В 2ой кадр танчика игрока дописываем код который будет проверять столкновение:

//**//ПРоверка столкновения с объектами//**//
if (_root.o_objects.hitTest(getBounds(_root).xMax, _y, true)) {
//left
_x -= 3;
}
else if (_root.o_objects.hitTest(getBounds(_root).xMin, _y, true)) {
//right
_x += 3;
}
else if (_root.o_objects.hitTest(_x, getBounds(_root).yMax, true)) {
//Up
_y -= 3;
}
else if (_root.o_objects.hitTest(_x, getBounds(_root).yMin, true)) {
//down
_y += 3;
}

Проверка выполняется с мувиком o_objectsи со всеми вложенными в него мувиками. Кстати, для того чтобы танчик не уехал за пределы ролика - нужно внутри мувика o_wall_frameнарисовать рамку, размером чуть больше границ сцены.

Разрушение стен.

Перед тем как приступить к созданию разрущаемых стен - сделаем мувик взрыва, этот мувик будет аттачиться когда пуля будет сталкиваться с различными объектами. Нарисуйте мувик взрыва, нужной вам длинны, в последнем кадре мувика впишите код:

unloadMovie(this);

Этот код будет выгружать мувик после того как его анимация закончиться.

Теперт приступим к созданию функции для уничтожения стен:

Для начала вписываем в кадр слоя Text функцию которая в зависимости от того с какой стороны пуля столкнулась с мувиком стены - будет ставить мувик на нужный кадр. Если пуля столкнется с мувиком o_wallу которого уже изменен главный кадр - мувик o_wall удаляется.

//**//Функция которая уничтожает стенки//**//
function destroy_wall(shot_name, wall_pice) {
//Пповеряем с какой стеной мы столкнулись
for (i=0; i<_root.wall_count; i++) {
if (_root[shot_name].hitTest(_root.o_objects.o_wall_frame["wall"+i])) {

//Если стенка целая - ставим на нужный фрейм
if (_root.o_objects.o_wall_frame["wall"+i]._currentframe == 1) {
_root.o_objects.o_wall_frame["wall"+i].gotoAndStop(wall_pice);
} else {

//если нет - выгружаем мувик
unloadMovie(_root.o_objects.o_wall_frame["wall"+i]);
}
}

//Аттачим на место столкновения мувик взрыва
_root.attachMovie("o_explosion", "o_explosion_wall", bullet_num+500, {_x:_root[shot_name]._x, _y:_root[shot_name]._y});
//выгружаем пулю
unloadMovie(_root[shot_name]);
}
}

Вот теперь у нас готова функция уничтожение стен, осталось поместить в мувик пули код, который будет проверять столкнулась ли пуля или нет.

//**//Проверка на столкновение пули с объектами в мувике o_objects, если столкновение произошло
// - выполняем функцию и ставим нужный фрейм в разрушенной стенке.
if (_root.o_objects.hitTest(_x, getBounds(_root).yMin, true)) {
//**//UP;
Пуля столкнулась с объектом стены с верху
_root.destroy_wall(_name, 5);
} else if (_root.o_objects.hitTest(_x, getBounds(_root).yMax, true)) {
//**//DOWN
_root.destroy_wall(_name, 3);
} else if (_root.o_objects.hitTest(getBounds(_root).xMin, _y, true)) {
//**//LEFT
_root.destroy_wall(_name, 2);
} else if (_root.o_objects.hitTest(getBounds(_root).xMax, _y, true)) {
//**//RIGHT
_root.destroy_wall(_name, 4);
}

Вот теперь пуля разрушает стенки. Приступим к созданию врагов.

Танчики врагов будут ездить по экрану, натыкаясь на стены - они будут менять направление, также они будут стрелять через определенное врямя. Танки врагов будут находиться внутри мувика o_objects. Для начала в кадр слоя Text впишем переменную enemy_count=0; Она будет присваиваться к имени танчика врага.

Мувик танчика врага, также как и танчик игрока будет состоять из 3х кадров. В 1ом кадре вписываем код:

//Эта переменная будет присваиваться к имени танка и к созданной им пули
enemy_number = _root.enemy_count;
_root.enemy_count++;

//Присваиваем танку имя
_name = 'o_enemy'+enemy_number;
//Переменны необходимые для таймера при стрельбе и смены направления
rotate_timer = getTimer();
shot_timer = getTimer();

Во втором кадре вписываем код движения и проверки столкновения с стенами:

//**//Движение танчика
_y -= 2.5*Math.sin(_rotation*(Math.PI/180));
_x -= 2.5*Math.cos(_rotation*(Math.PI/180));

//**//Смена направления через через 1000мс
if (getTimer()-rotate_timer>1000) {
_rotation = (1+random(3))*90;
rotate_timer = getTimer()+random(500);
}

//**//Вызов пули из библиотеки
if (getTimer()-shot_timer>2500) {
shot_timer = getTimer();
_root.attachMovie("o_shot_e", "o_shot_e"+enemy_number, 100+enemy_number, {_x:this._x, _y:this._y, _rotation:this._rotation});
}

//**//Проверка столкновения с стенками и смена направления движения
if (_root.o_objects.o_wall_frame.hitTest(getBounds(_root.o_objects).xMax, _y, true)) {
//Right
_rotation = 90;
_x -= 2.5;
} else if (_root.o_objects.o_wall_frame.hitTest(getBounds(_root.o_objects).xMin, _y, true)) {
//Left
_rotation = 270;
_x += 2.5;
} else if (_root.o_objects.o_wall_frame.hitTest(_x, getBounds(_root.o_objects).yMax, true)) {
//Down
_rotation = 180;
_y -= 2.5;
} else if (_root.o_objects.o_wall_frame.hitTest(_x, getBounds(_root.o_objects).yMin, true)) {
//Up
_rotation = 0;
_y += 2.5;
}

В третьем кадре вписываем код который будет выполнять возврат на 2ой кадр.

gotoAndPlay(2)

Как видите, в танчик врага мы уже вписали код который вызывает пулю врага из библиотеки, так что теперь давайте сделаем пулю противника. Она также разрущать стенки и уничтожать танк игрока. Вот код который она сожердит в 1ом фрейме, как видите он почти такой же как в мувике пули игрока, различия только в просчете столкновений с стенками.

//Движение пули в направлении _rotation с скоростью 7 пикселей.
_y -= 7*Math.sin(_rotation*(Math.PI/180));
_x -= 7*Math.cos(_rotation*(Math.PI/180));

//**//Проверка на столкновение пули с объектами в мувике o_objects, если столкновение произошло
// - выполняем функцию и ставим нужный фрейм в разрушенной стенке.
if (_root.o_objects.o_wall_frame.hitTest(_x, getBounds(_root.o_objects).yMin, true)) {
//**//UP; Пуля столкнулась с объектом стены с верху
_root.destroy_wall(_name, 5);
} else if (_root.o_objects.o_wall_frame.hitTest(_x, getBounds(_root.o_objects).yMax, true)) {
//**//DOWN
_root.destroy_wall(_name, 3);
} else if (_root.o_objects.o_wall_frame.hitTest(getBounds(_root.o_objects).xMin, _y, true)) {
//**//LEFT
_root.destroy_wall(_name, 2);
} else if (_root.o_objects.o_wall_frame.hitTest(getBounds(_root.o_objects).xMax, _y, true)) {
//**//RIGHT
_root.destroy_wall(_name, 4);
}

//*// ПРоверка на столкновение с мувиком танчика игрока и выгрузка танчика игрока если произошло столкновение.
if (this.hitTest(_root.player)) {
//Аттачим на место столкновения мувик взрыва
_root.attachMovie("o_explosion", "o_explosion_wall", bullet_num+500, {_x:this._x, _y:this._y});
unloadMovie(this);
unloadMovie(_root.player);
}

Во втором кадре как обычно ставим переход на первый кадр.

Теперь допишем в кадр пули игрока код, который будет уничтожать танки противника.

//Циклом проверяем столкнулась ли пуля с вражеским танком.
for (i=0; i<_root.enemy_count; i++) {
if (this.hitTest(_root.o_objects["o_enemy"+i])) {

//Аттачим на место столкновения мувик взрыва
_root.attachMovie("o_explosion", "o_explosion_wall", bullet_num+500, {_x:this._x, _y:this._y});
//Убираем пулю
unloadMovie(this);
//Ставим убитому танку новые координаты
_root.o_objects["o_enemy"+i]._x = 16+random(17)*32;
_root.o_objects["o_enemy"+i]._y = 16;
}
}

Теперь при столкновении пули с танком врага - он переноситься на начальную позицию в верхний угол сцены.

Осталось сделать объект базы и вписать в пули врага и игрока код - который будет проверять столкновение с базой.

Создаем мувик базы, присваиваем ей имя o_base и размещаем внутри объекта o_wall_frame;

Затем добавляем в код пули игрока и противника код, который будет проверять столкновение с базой и закрывать ролик если база уничтожена.

//Проверка столкновения с базой.
if (this.hitTest(_root.o_objects.o_wall_frame.o_base)) {
fscommand('quit', "");
}

Ну вот и все, каркас для игры танчики готов.

Прикрепления: 9038813.jpg (19.5 Kb) · 8516630.jpg (10.2 Kb) · 3691094.jpg (19.6 Kb) · 3511298.jpg (27.5 Kb) · 8772052.jpg (17.9 Kb)


Если Вам понравился сайт или какая либо информация на нем, то, пожалуйста, пройдите регистрацию...
 
okc-08-2Дата: Понедельник, 19.01.2009, 15:31:32 | Сообщение # 3
Директор/враг общества (Вель)
Группа: Администраторы
Сообщений: 177
Репутация: 0
Статус: Offline
создание флэш чата

пример классического чата во флэше, пользователи заходят в комнату чата, автоматически добавляясь к списку пользователей. Выходя, соотвественно удаляясь из списка. Эту работу лучше всего выполнять на сервере.
Замечу что работа сервера не ограничивается только управлением списком пользователей, от также получает текст от пользователя и транслирует его всем кто подключен к серверу, добавляя к его тексту, имя пользователя который отослал его.
И наконец, этот пример показывает как динамически задавать имена каналов, при соединении с сервером в NetConnection.connect комманде.

Подготовительная работа:

1. Создайте новый фаил во flash (флэш) ( File > New )
2. Из панели инструментов, выберите инструмент Текст, и создайте три текстовых поля. через Property inspector задайте название полей - одного User другого Room третьего Message, тип полей - Input Text.
3. Создайте таким же образом ещё одно текстовое поле, задав ему тип текстового поля Dynamic Text, его название - History.
4. Из панели компонентов добавте компонент - List Box, для отображения списка пользователей чата. Задайте название компонента как People.
5. Добавте компонент кнопка для подключения к серверу. Задайте её название как Connect_btn надпись на кнопке пускай будет Connect (функция обработки события будет doConnect).
6. Добавте также кнопку для отправки текста. Задайте ей название Send_btn (надпись на кнопке пускай будет Send, функция обработки события нажатия doSend)
8. Создайте каталог doc_textchat в котором будет находиться ваше приложение. Помните что этот каталог должен находиться внутри каталога который обслуживается Flash Media Server. Подробнее о Flash Media Server и принципах его работы

Создадим код на стороне клиента:
1. В первом кадре вставте следующий код
stop(); // что бы ролик не перезапускался через каждый кадр
2. Задайте значение максимальной прокрутки для окна текстовых сообщений (History)
History.maxscroll = 1000;
3. Предотвратите попытку отсылки сообщения до того как пользователь подключется к серверу, при помощи следующего кода
_root.Send_btn.setEnabled(false);
4. Создадим объект сетевого подключения
client_nc = new NetConnection();
5. Код который выполняется когда статус подключения меняется

// если соединение закрыто, очищается история и лист пользователей
client_nc.onStatus = function(info) {

trace("Level: " + info.level + " Code: " + info.code);

if (info.description == "NetConnection.Connect.Closed") {
History.text = "";
_root.People.removeAll();
}
}

7. Создадим функцию обрабатывающая нажатие кнопки Connect. После нажатия, надпись на кнопке меняется на Disconnect (в зависимости от того какая надпись на кнопке, меняется её и функциональность).

function doConnect() {

if (Connect_btn.getLabel() == "Connect") {

// соеденяемся с сервером при помощи объекта NetConnection - client_nc
// второй параметн, _root.Room.text - это название канала.
_root.client_nc.connect("rtmp:/doc_textchat/" + _root.Room.text, _root.User.text);

// изменяем надпись на кропке
Connect_btn.setLabel("Disconnect");

// активируем кнопку
_root.Send_btn.setEnabled(true);

7. В тойже самой функции создадим объект с данными для хранения списка пользователей, хранящийся на сервере, и подсоеденимся к нему.

users_so = SharedObject.getRemote("users_so", _root.client_nc.uri,false);
//второй параметр метода адрес сетевого подключения,
//третий параметр указывает на то что сохранять данные на сервере не надо
users_so.connect(_root.client_nc);

8. в тойже самой функции создайте обработчик события onSync, который бы обрабатывал изменение количиства пользователей (как только кто-нибудь подключается к серверу, это событие возникает)

// как только переменная users_so изменилась, изменяем и
// компонент list box который у нас для отображения пользователей.
users_so.onSync = function(userList) {

_root.People.removeAll();

for ( var i in users_so.data) {
if (users_so.data[i] != null) {
_root.People.addItem(users_so.data[i]);
}
}

// производим сортировку списка пользователей по алфавиту
_root.People.sortItemsBy("label", "ASC");
}

9. создадим функцию, которая будет вызываться с сервера, для обработки приходящих текстовых сообщений.

// переменная передаваемая сервером, получает название msg и обрабатывается в функции, добавляясь к текстовому полю.
users_so.msgFromSrvr = function(msg) {

_root.History.text += msg;
_root.History.scroll = _root.History.maxscroll;
historyScroll.setScrollTarget(history);
historyScroll.setScrollPosition(_root.History.maxscroll);
}
}

10. Теперь закончим с обработкой нажатия кнопки на которой надпись Connect.
Создадим код для обработки нажатия кнопки, на которой надпись Disconnect.
в этой фукнции мы закрываем соединение, и меняем надпись на кропке обратно на Connect.

else if (Connect_btn.getLabel() == "Disconnect") {

// Close connection
_root.client_nc.close();

// Don't allow the user to send when not connected
_root.Send_btn.setEnabled(false);

// Rest button label
Connect_btn.setLabel("Connect");

}
} // здесь заканчивается функция doConnect

11. СОздадим фукнцию обрабатывающюю событие - нажатие на кнопке Send. если там не пустая строка, тогда вызываем на сервере функцию msgFromClient и передаем ей текстовое сообщение. Затем очищаем строку в которой мы вводим сообщения.

function doSend() {

// если строка не пустая, вызываем функцию на сервере msgFromClient
if (length(_root.Message.text) > 0) {
_root.client_nc.call("msgFromClient", null, _root.Message.text);
}

// очищаем текстовое поле, в которое мы вводим сообщения
_root.Message.text = "";

}

12. Создадим функцию setHistory которую вызывает сервер для обновления текстового поля с историей сообщений.

client_nc.setHistory = function(msg) {
_root.History.text = msg;
}

Теперь приступим к созданию кода на самом сервере.
1. Создайте новый ActionScript фаил, и напишите в нём функцию обрабатывающая событие onAppStart (которое возникает когда приложение только загружается на сервере)

application.onAppStart = function()
{
trace("Begin sharing text");

// задать объект данных users_so
application.users_so = SharedObject.get("users_so", false);

// задать начальные условия текстовому полю history
application.history = "";

// задать начальные условия для счётчика с пользовательскими номером
application.nextId = 0;
}

2. Теперь создадим функцию обрабатывающая событие onConnect (которое возникает когда пользователь первый раз подключается к серверу)

application.onConnect = function(newClient, name)
{
// убедитесь что новое имя клиента и есть имя пользователя которое он задал
newClient.name = name;

// присваеваем пользователю индификационный номер, который увеличеваем перед этим на еденицу.
newClient.id = "u" + application.nextId++;

// запоминаем имя пользователя в объекте с данными users_so
application.users_so.setProperty(newClient.name, name);

// принимаем подключения этого пользователя
application.acceptConnection(newClient);

// вызываем у клиента функцию setHistory и задаём ей начальные значения истории переговоров этого пользователя.
newClient.call("setHistory", null, application.history);

// клиент будет вызывать эту функцию передавая сообщение которое он напишит
// что бы сервер отослал это сообщение затем всем пользователям которые подключены к чату (замечу что сервер также добавляет к телу сообщения имя пользователя который его выслал)
newClient.msgFromClient = function(msg) {
msg = this.name + ": " + msg + "\n";
application.history += msg;
application.users_so.send("msgFromSrvr", msg);
}
}

теперь напишим функцию обрабатывающая событие onDisconnect (которое возникает когда заканчивается или обрывается связь), которая будет удалять информацию о клиенте.

application.onDisconnect = function(client)
{
trace("disconnect: " + client.name);
application.users_so.setProperty(client.name, null);
}

4. Сохраните фаил как main.asc в каталоге работы вашего приложения на сервере (у нас это каталог doc_textchat который в свою очередь должен находиться внутри каталога обслуживаемого flash media server, и вашим www сервером)

что бы протестировать ваше приложения, вы можете просто запустить две копии приложения и поотсылать друг другу сообщения. Теперь вы можете наслаждайться общением.


Если Вам понравился сайт или какая либо информация на нем, то, пожалуйста, пройдите регистрацию...
 
okc-08-2Дата: Понедельник, 19.01.2009, 15:36:30 | Сообщение # 4
Директор/враг общества (Вель)
Группа: Администраторы
Сообщений: 177
Репутация: 0
Статус: Offline
Создание 2D шутера
Создание 2D шутера2


Если Вам понравился сайт или какая либо информация на нем, то, пожалуйста, пройдите регистрацию...
 
okc-08-2Дата: Понедельник, 19.01.2009, 15:37:22 | Сообщение # 5
Директор/враг общества (Вель)
Группа: Администраторы
Сообщений: 177
Репутация: 0
Статус: Offline
Создание игры типа змейки
Создание игры типа змейки2


Если Вам понравился сайт или какая либо информация на нем, то, пожалуйста, пройдите регистрацию...
 
okc-08-2Дата: Понедельник, 19.01.2009, 15:38:05 | Сообщение # 6
Директор/враг общества (Вель)
Группа: Администраторы
Сообщений: 177
Репутация: 0
Статус: Offline
Пример создания фотогалереи

Если Вам понравился сайт или какая либо информация на нем, то, пожалуйста, пройдите регистрацию...
 
okc-08-2Дата: Понедельник, 19.01.2009, 15:40:24 | Сообщение # 7
Директор/враг общества (Вель)
Группа: Администраторы
Сообщений: 177
Репутация: 0
Статус: Offline
Пример создания игры арканоида

Если Вам понравился сайт или какая либо информация на нем, то, пожалуйста, пройдите регистрацию...
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024

Счетчик и проверка тИЦ и PR Яндекс цитирования

fff