В этом кратком совете мы создадим собственное перекрестие и звук выстрела. Это может стать основой для игры в перестрелку. В этом примере мы размещаем пулевые отверстия на сцене в точке, где вы нажимаете.
Примечание. Несмотря на новую функцию Native Cursor, представленную в FP10.2, этот метод старой школы все еще является действительным способом создания пользовательского курсора. Он имеет преимущество в том, что позволяет вам использовать более крупную графику, плюс он будет работать со старыми версиями Flash Player. Завтра мы рассмотрим родные курсоры в FP10.2 🙂
Краткий обзор
В SWF вы увидите кнопку «Пуск». Когда вы нажимаете эту кнопку, ваша мышь становится перекрестием, готовым нанести некоторый урон. Когда вы щелкаете по сцене, звучит выстрел, и на сцену добавляется изображение пулевого отверстия в точке, где вы щелкнули мышью.
Шаг 1: Настройка документа
Откройте новый документ Flash и установите следующие свойства
- Размер документа: 500×400 пикселей
- Цвет фона: #FFFFFF
Шаг 2: Настройка игровых элементов
Для кнопки «Пуск» я нарисовал скругленный прямоугольник и поместил на него текст со словом «Пуск». Затем я преобразовал кнопку и текст в мувиклип, нарисовав выделение вокруг них и нажав клавишу F8. Я дал кнопке имя startGame , а также использовал startGame качестве имени экземпляра на панели «Свойства». Если панель Свойства не отображается для вас, перейдите в Меню-> Окно-> Свойства или просто нажмите CTRL + F3 .


В файлы упражнений включены два изображения: одно — изображение перекрестия, а другое — изображение пулевого отверстия. Я импортировал их по очереди на сцену и преобразовал их в мувиклип, щелкнув по ним и нажав F8. Я дал им имена экземпляров «BulletHole» и «CrossHair», удостоверился, что точки регистрации были установлены в центре в обоих случаях, и использовал одно и то же имя для класса в соединении каждого символа. Ниже приведено изображение того, как я настроил BulletHole; то же самое для CrossHair.

Для звука я импортировал его в библиотеку, затем щелкнул его правой кнопкой мыши и выбрал «Свойства». Затем я дал ему имя GunShot и установил класс связывания как GunShot.

Теперь, когда у нас есть все готовые игровые элементы, мы можем погрузиться в код.
Шаг 3: настройка пакета и основного класса
Здесь мы настроили наш пакет и основной класс для нашей игры
Сначала мы импортируем некоторые классы, которые нам понадобятся, затем мы устанавливаем наш класс документа . Этот основной класс должен расширять либо MovieClip, либо Sprite; здесь мы расширяем MovieClip. Затем мы объявляем некоторые переменные, которые будем использовать, и кодируем нашу функцию конструктора. Функция конструктора добавляет прослушиватель событий к кнопке, где мы настраиваем остальную часть игры.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.media.Sound;
import flash.media.SoundChannel;
public class Main extends MovieClip {
//The movie clips and Sound in the Library
var crosshair:CrossHair = new CrossHair();
var bullethole:BulletHole;
var gunshot:GunShot = new GunShot();
//Needed for the gunshot sound
var soundChannel:SoundChannel = new SoundChannel;
//Whether or not the user has clicked 1 time
var firstShot = true;
}
public function Main() {
//Show hand cursor when user mouses over the button
startGame.buttonMode=true;
startGame.addEventListener(MouseEvent.CLICK,startTheGame);
}
}
|
Шаг 4: Кодирование функции startTheGame()
Функция startTheGame() вызывается, когда пользователь нажимает кнопку. Эта функция удаляет кнопку со сцены, скрывает мышь и добавляет перекрестие на сцену. Затем мы добавляем двух слушателей событий на сцену.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
private function startTheGame(e:MouseEvent):void{
//Remove the button from the stage
removeChild(startGame);
//Hides the mouse
Mouse.hide();
//Adds the crosshair and sets its x and y properties
//to the mouse’s x and y coordinates
addChild(crosshair);
crosshair.x = mouseX;
crosshair.y = mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE,moveCursor);
stage.addEventListener(MouseEvent.CLICK,fireShot);
}
|
Шаг 5: Кодирование moveCursor() и fireShot()
Функция moveCursor() вызывается всякий раз, когда пользователь перемещает мышь, из-за прослушивателя событий MOUSE_MOVE, который мы добавили на сцену. В этой функции мы просто mouseX что перекрестие находится в том же положении, что и мышь, используя mouseX и MouseY .
|
1
2
3
4
5
6
|
private function moveCursor(e:MouseEvent):void{
//Makes sure the crosshair x and y is always
//where the mouse’s x and y is
crosshair.x = mouseX;
crosshair.y = mouseY;
}
|
Функция fireShot() вызывается всякий раз, когда пользователь нажимает на сцену. Сначала мы проверяем, нажал ли пользователь впервые; если это не так, то мы воспроизводим звук выстрела и добавляем bulletHole в ту же позицию на сцене, где пользователь щелкнул, используя e.stageX и e.stageY . Событие содержит информацию о себе — вы можете увидеть, что оно содержит, используя trace(e.toString()) .
Если мы не проверим, было ли это в первый раз, то, когда пользователь впервые нажмет на кнопку «Пуск», он добавит перекрестие и воспроизведет звук выстрела (мы этого не хотим).
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
private function fireShot(e:MouseEvent):void{
//If they have clicked once then we do this
if(firstShot == false){
//Plays the sound
soundChannel = gunshot.play();
//Creates a new bullethole and adds it to the
//stage at the place where the user clicked
bullethole = new BulletHole();
addChild(bullethole);
bullethole.x = e.stageX;
bullethole.y = e.stageY;
//We always want the crosshair on top so we swap the «Depths»
//of the crosshair and bullet
swapChildren(bullethole,crosshair);
}
firstShot = false;
}
}//Close the class
}//Close the package
|
Вывод
Это может послужить основой для многих игр типа «стреляй им». Было бы очень легко вызвать некоторых врагов, а затем выполнить проверку hitTestPoint () с помощью мыши X и Y против экранного объекта противника.
Я надеюсь, вам понравился этот урок. Спасибо за прочтение!