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

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

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

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

Нажмите на изображение для увеличения
Название: Без-имени-2.jpg
Просмотров: 45
Размер:	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 нужен только браузер, желательно последней версии.
Размещено в Идеи
Просмотров 200 Комментарии 4
Всего комментариев 4
Комментарии
  1. Старый комментарий
    а такую осилишь?
    https://store.steampowered.com/app/438040/Shakes_and_Fidget/?l=russian
    она тоже на AS3 написана
    Запись от sam063rus размещена 05.04.2019 в 03:21 sam063rus вне форума
  2. Старый комментарий
    Аватар для pavlinmavlin
    Цитата:
    Сообщение от sam063rus Просмотреть комментарий
    а такую осилишь?
    https://store.steampowered.com/app/438040/Shakes_and_Fidget/?l=russian
    она тоже на AS3 написана
    теоретически это возможно
    Запись от pavlinmavlin размещена 05.04.2019 в 11:58 pavlinmavlin вне форума
  3. Старый комментарий
    Цитата:
    Сообщение от pavlinmavlin Просмотреть комментарий
    теоретически это возможно
    да... тут нужен контент: художники, музыка (главное хорошие 2D-художники)
    если с ними проблем не будет то, можно потом будет даже попытаться издать в STEAM.
    Запись от sam063rus размещена 05.04.2019 в 12:59 sam063rus вне форума
  4. Старый комментарий
    а если бы ещё можно было сшибать самолеты расхитителей госсобственности в особо крупных размерах да захватчиков госаппарата и ресурсов всей страны, нет, всей планеты, вот тогда было бы шикарно.
    да, не плохо сделано
    Запись от karrbonn размещена 09.04.2019 в 21:58 karrbonn вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru