Форум программистов, компьютерный форум, киберфорум
pavlinmavlin
Войти
Регистрация
Восстановить пароль

Flash(AS3) мини-игра

Запись от pavlinmavlin размещена 04.04.2019 в 15:42
Показов 2659 Комментарии 4
Метки action script 3, as3, flash

А вот это уже собственно Flash, Action Script 3

Нажмите на изображение для увеличения
Название: Без-имени-2.jpg
Просмотров: 619
Размер:	70.4 Кб
ID:	5324

Смысл игры сшибать самолеты немецко-фашистких захватчиков с помощью танка т90

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
stop(); // останавливаем анимацию
 
var schet = new TextField(); // создаем текстовой Поле, в котором будет счет
schet.x = 50; // координаты счета по оси х
schet.y = 20; // координаты счета по оси у
schet.width=100; // ширина текстового поля счет
schet.height=30; // высота текстового поля счет
schet.backgroundColor= 0x000000; // цвет текста текстового поля счет(000000 - черный)
 
var s = 0;
addChild(schet);// прорисовываем счет
 
var uskorenie = 0.001; 
var tank = new t90(); // добавляем танк
tank.x = 150; // координаты танка по х
tank.y = 400; // координаты танка по y
tank.width=150; // ширина танка 
tank.height=70; // высота танка
addChild(tank); // прорисовываем танк
 
var puli = []; // создаем массив пуль танка
 
var duloTanka = new t90p(); // создаем дуло танка
 
duloTanka.x = 150; // дуло танка по оси х
duloTanka.y = 403;  // дуло танка по оси у
duloTanka.width=70;// ширина дула танка
duloTanka.height=40;// высота дула танка
 
// Дуло танка меняет угол наклона ориентируясь на объект
// который находится за пределами поля tch - точка
tch.x = 500; // координаты точки по х
tch.y = 200; // координаты точки по у
tch.width = 30; // ширина точки
tch.height=30; // высота точки
 
addChild(tch); // отрисовываем точку
addChild(duloTanka); // отрисовываем дуло танка
 
var countMesser = 0; // кол-во мессеров
var countPuli = 0; // количество пуль
 
var upravlenie = new TextField(); // создаем текстовой поле Управление
upravlenie.x = 50; // координаты по Х
upravlenie.y = 500; // координаты по У
upravlenie.width= 500; // ширина текстового поля
upravlenie.height= 100; // высота текстового поля
upravlenie.text = "Пробел - стрелять , Cтрелка вверх - поднять дуло, Cтрелка вниз - опустить дуло";
addChild(upravlenie);// отрисовываем текстовое поле
 
// назначаем функцию-обработчик на каждый кадр - появление мессеров
stage.addEventListener(Event.ENTER_FRAME,mobs);
// назначаем Функцию-обработчик нажатой клавише
stage.addEventListener(KeyboardEvent.KEY_DOWN, go);
// назначаем Функцию-обработчик отпущенной клавиши
stage.addEventListener(KeyboardEvent.KEY_UP, out);
 
// функция появления мессеров
function mobs(e:Event)
{
    // Если кол-во мессеров меньше 2
    if(countMesser < 2)
    {
        // создаем мессер
        var k = new messer();
        // увеличиваем кол-во мессеров в переменной
        countMesser +=1;
        k.x = 550; // прописываем мессеру координаты по х
        k.y = 50+Math.random()*200; // прописываем рандомно координаты по у
        var w = 7; // изначальная ширина мессера для сохранения соотношения Ширины VS Высоты
        var h = 5; // изначальная высота мессера для сохранения соотношения Ширины VS Высоты
        var vel = 2+Math.random()*20; // кратность увеличения величины
        k.width= w*vel; // ширина мессера
        k.height = h*vel; // высота мессера
        addChild(k); // прорисовываем текущий мессер
        
        k.addEventListener(Event.ENTER_FRAME,go_mob);// задаем мессеру обработчик движения
    }
}
 
// функция движения мессера
function go_mob(e:Event)
{
    var k = e.currentTarget; // Объект привязанный к событию(мессер) помещаем в переменную
    
    k.x -= 1 + Math.random()*5; // мессер перемещается по оси х с рандомной скоростью
    
    var count = puli.length; // кол-во снарядов выпущенных из танка
    
    for(var i = 0; i < count; i++)
    {
        // Если текущий снаряд пересекается с текущим Мессером
        if(puli[i].hitTestObject(k))
        {
            // счет +1
            s +=1;
            // меняем текст счета
            schet.text = "Счет:  " + s;
            // кол-во пуль уменьшаем на 1 
            countPuli -=1;
            // удаляем снаряд с поля боя
            removeChild(puli[i]);
            // удаляе мобработчик снаряда
            puli[i].removeEventListener(Event.ENTER_FRAME,down);
            // удаляем снаряд из массива
            puli.splice(i,1);
            
            // текущему месеру удаляем обработчик движения
            k.removeEventListener(Event.ENTER_FRAME,go_mob);
            // и убираем его с поля боя
            removeChild(k);
            // кол-во мессеров уменьшаем на 1
            countMesser -=1;
        }
    }
     
    // если мессер долетел до левого края поля 
    // и не был сшиблен
    if(k.x < 50)
    {
        // уменьшаем кол-во мессеров на 1
        countMesser -=1;
        // убираем обрботчик движения мессера
        k.removeEventListener(Event.ENTER_FRAME,go_mob);
        // убираем мессер с поля боя
        removeChild(k);
    }
}
 
// функция отслеживания нажатия клавиш
function go(e:KeyboardEvent)
{
    // Если это пробел
    if(e.keyCode == 32)
    {
        // добавляе мна поле боя в каждый кард функцию-обработчик Element
        stage.addEventListener(Event.ENTER_FRAME, element);
    }
    else
    {
        // если это стрелка вверх
        if(e.keyCode == 38)
        {
            // точка на которую ориентируется дуло поднимается по оси У
            tch.y -=10; 
            
        }
        // Если это стрелка вниз
        if(e.keyCode == 40)
        {
            // точка на которую ориентируется дуло опускается по оси У
            tch.y +=10;
        }
        
        // точка не может подняться выше -200 по У
        if(tch.y < -200)
        {
            tch.y=-200;
        }
        // Точка не может опуститься ниже 600 по У
        if(tch.y > 600)
        {
            tch.y=600;
        }
        
        // Вычисляем угол наклона, относительно координат точки
        var art = Math.atan2(tch.y,tch.x)*180/Math.PI;
        // задаем дулу Танка угол наклона
        duloTanka.rotation=art-17;
    }
}
 
// функция отпуска клавиши
function out(e:KeyboardEvent)
{
    // если мы отпустили пробел
    if(e.keyCode == 32)
    {
        // то останавливаем выстрелы танка
        stage.removeEventListener(Event.ENTER_FRAME, element);
    }
}
 
 
// Функция вылета снаряда из дула танка
function element(e:Event)
{
    // Если ко-во снарядов на поле меньше 1
    if(countPuli < 1)
    {
        // Кол-во снарядов увеличиваем на 1
        countPuli +=1;
        // создаем снаряд
        var snaryad = new s1();
        // задаем снаряду координаты по х и у
        snaryad.x = duloTanka.x;
        snaryad.y = duloTanka.y;  
        // задаем снаряду ширину и высоту
        snaryad.width  = 20;
        snaryad.height = 20;
        // задаем снаряду скорость
        snaryad.xmov=0;
        snaryad.ymov=0;
        // добавляе мснаряд на поле боя
        addChild(snaryad);
        // добавляем снаряд в массив снарядов
        puli.push(snaryad);
        // назначаем снаряду обработчик
        snaryad.addEventListener(Event.ENTER_FRAME, down);
    }
}
 
// обработчик снаряда
function down(e:Event) 
{
    // выбираем текущий элемент, которому был назначен обработчик (снаряд)
    var snaryad = e.currentTarget;
    
    // если скорость снаряда равна 0, значит он только что появился
    // и ему нужно назначить скорость
    // На основе того, что скорость назначается относительно рассояния между Точкой и снарядом
    // их расстояние в каждом карде будет меняться
    // поэтому назначаем снаряду скорость только 1 раз
    // т.к. по мере приближения по логике скорость снаряда будет приближаться к нулю.
    // а он у нас должен сохранять свою скорость
    // к тому же при перемещении точки Снаряд будет менять свою траекторию 
    // а Нам это не надо
    if(snaryad.ymov == 0)
    {
        // Вычисляем скорость снаряда по X и У
        snaryad.ymov = (tch.y-snaryad.y)/100;
        snaryad.xmov = (tch.x-snaryad.x)/100;
    }
    
    // Вычисляем угол наклона 
    var angle = Math.atan2(snaryad.ymov,snaryad.xmov)*180/Math.PI;
    // назначаем угол наклона снаряду
    snaryad.rotation= angle;
    
    // перемещаем снаряд со скоростью Х и У
    snaryad.y +=snaryad.ymov;
    snaryad.x +=snaryad.xmov;
     
    // Если снаряд вышел за пределы поля боя
    if(snaryad.y >= 500 || snaryad.y <0 || snaryad.x > 550 || snaryad.x < 0 )
    { 
        // вычисляем индекс снаряда в массиве снарядов
        var index = puli.indexOf(snaryad);
        // останавливаем
        stop();
        // удаляем снаряд из массива
        puli.splice(index,1);
        // удаляем снаряд с поля боя
        removeChild(snaryad);
        // удаляем обработчик снаряда
        snaryad.removeEventListener(Event.ENTER_FRAME,down);
        // уменьшаем кол-вол снарядов на 1
        countPuli -=1;
    }
}
t90.zip

Если сравнивать с HTML5+Js по написанию разница небольшая, логика одна и та же. Только для AS3 использовался Adobe Flash Pro CS6, а HTML и JS писались в notepad++ нативно. Чтобы запустить флеш в Браузере нужно импортировать его тегом object.
HTML5
1
2
3
<object type="application/x-shockwave-flash" 
      data="images/s2.swf" width="500" height="400">
   </object>
Так же требуется определенная версия Flashplayer'a
Для HTML5+JS нужен только браузер, желательно последней версии.
Метки action script 3, as3, flash
Размещено в Идеи
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 4
Комментарии
  1. Старый комментарий
    а такую осилишь?
    https://store.steampowered.com... ?l=russian
    она тоже на AS3 написана
    Запись от untyped размещена 05.04.2019 в 03:21 untyped вне форума
  2. Старый комментарий
    Аватар для pavlinmavlin
    Цитата Сообщение от sam063rus
    а такую осилишь?
    https://store.steampowered.com... ?l=russian
    она тоже на AS3 написана
    теоретически это возможно
    Запись от pavlinmavlin размещена 05.04.2019 в 11:58 pavlinmavlin вне форума
  3. Старый комментарий
    Цитата Сообщение от pavlinmavlin
    теоретически это возможно
    да... тут нужен контент: художники, музыка (главное хорошие 2D-художники)
    если с ними проблем не будет то, можно потом будет даже попытаться издать в STEAM.
    Запись от untyped размещена 05.04.2019 в 12:59 untyped вне форума
  4. Старый комментарий
    Аватар для karrbonn
    а если бы ещё можно было сшибать самолеты расхитителей госсобственности в особо крупных размерах да захватчиков госаппарата и ресурсов всей страны, нет, всей планеты, вот тогда было бы шикарно.
    да, не плохо сделано
    Запись от karrbonn размещена 09.04.2019 в 21:58 karrbonn вне форума
 
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru