![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2012
Сообщений: 28
|
Здравствуйте! Подскажите как реализовать взаимодействие кнопки и игры в формате swf? Создал кнопку, в первом кадре слоя as пишу код:
btn.buttonMode = true; btn.addEventListener(MouseEvent.CLICK, btnClicked); function btnClicked(e:MouseEvent):void { var swfRequest:URLRequest = new URLRequest("saper.swf"); var swfLoader:Loader = new Loader(); swfLoader.load(swfRequest); addChild(swfLoader); swfLoader.x = stage.stageWidth - 550; swfLoader.y = 0; } at Main() Направьте на путь пожалуйста. |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 28
|
Причем самое интересное в том, что вставляю любой другой файл swf и код работает как нужно.
|
|
|||||
|
Скорее всего в этом файле saper.swf в конструкторе класса Main идет обращение к stage. А ее еще нет на стадии инициализации. Отсюда и ссылка на объект null.
Надо в том файле добавить в конструктор такой код: |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 28
|
Цитата:
|
|
|||||
|
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
По-моему вот этот код вызывает ошибку
addChild(swfLoader); swfLoader.x = stage.stageWidth - 550; swfLoader.y = 0; Нужно добавить слушатель события на окончание загрузки Event.COMPLETE , а потом в приемнике писать этот код. |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 28
|
Помогите пожалуйста решить эту проблему. Отблагодарю перечислением на вебмани. Вопрос жизни и смерти.
|
|
|||||
|
Переделал:
package { // импортируем классы import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.utils.Timer; // конец импорта классов public class Main extends Sprite { // переменные класса private const FIELD_W:uint = 9; private const FIELD_H:uint = 9; private const NUM_MINES:uint = 10; private var mineField:Array = new Array(); private var game_container:Sprite = new Sprite(); private var tile:tile_movieclip; private var timer:Timer = new Timer(1000); private var toolbar:toolbar_mc; private var gameOver:Boolean = false; private var firstClick:Boolean = true; // конец записи переменных класса public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // создаем минное поле for (var i:uint = 0; i < FIELD_H; i++) { mineField[i] = new Array(); for (var j:uint = 0; j < FIELD_W; j++) { mineField[i].push(0); } } // конец создания минного поля // создание плиток addChild(game_container); for (i = 0; i < FIELD_H; i++) { for (j = 0; j < FIELD_W; j++) { tile = new tile_movieclip(); game_container.addChild(tile); tile.gotoAndStop(1); tile.nrow = i; tile.ncol = j; tile.buttonMode = true; tile.x = 140 + tile.width * j; tile.y = 65 + tile.height * i; tile.addEventListener(MouseEvent.CLICK, onTileClicked); } } // конец создания плиток // управление временем и конец игры toolbar = new toolbar_mc(); addChild(toolbar); toolbar.y = stage.stageHeight - toolbar.height; timer.start(); timer.addEventListener(TimerEvent.TIMER, onTick); // конец управления временем и окончания игры } private function tileValue(row,col:uint):int { if (mineField[row] == undefined || mineField[row][col] == undefined) { return -1; } else { return mineField[row][col]; } } private function onTileClicked(e:MouseEvent):void { if (!gameOver) { var clicked_tile:tile_movieclip = e.currentTarget as tile_movieclip; var clickedRow:uint = clicked_tile.nrow; var clickedCol:uint = clicked_tile.ncol; if (firstClick) { firstClick = false; // минируем поле var placedMines:uint = 0; var randomRow,randomCol:uint; while (placedMines < NUM_MINES) { randomRow = Math.floor(Math.random() * FIELD_H); randomCol = Math.floor(Math.random() * FIELD_W); if (mineField[randomRow][randomCol] == 0) { if (randomRow != clickedRow || randomCol != clickedCol) { mineField[randomRow][randomCol] = 9; placedMines++; } } } // конец минирования поля // помещаем цифры for (var i = 0; i < FIELD_H; i++) { for (var j = 0; j < FIELD_W; j++) { if (mineField[i][j] == 9) { for (var ii:int = -1; ii <= 1; ii++) { for (var jj:int =- 1; jj <= 1; jj++) { if (ii != 0 || jj != 0) { if (tileValue(i+ii,j+jj) != 9 && tileValue(i+ii,j+jj) != -1) { mineField[i + ii][j + jj]++; } } } } } } } var debugString:String; for (i = 0; i < FIELD_H; i++) { debugString = ""; for (j = 0; j < FIELD_W; j++) { debugString += mineField[i][j] + " "; } trace(debugString); } // конец помещения цифр } var clickedValue:uint = mineField[clickedRow][clickedCol]; if (e.shiftKey) { clicked_tile.gotoAndStop(5 - clicked_tile.currentFrame); } else { if (clicked_tile.currentFrame == 1) { clicked_tile.removeEventListener(MouseEvent.CLICK, onTileClicked); clicked_tile.buttonMode = false; // пустая плитка if (clickedValue == 0) { floodFill(clickedRow, clickedCol); } // конец пустой плитки // плитка с цифрой if (clickedValue > 0 && clickedValue < 9) { clicked_tile.gotoAndStop(2); clicked_tile.tile_text.text = clickedValue.toString(); } // конец плитки с цифрой // мина if (clickedValue == 9) { clicked_tile.gotoAndStop(3); timer.removeEventListener(TimerEvent.TIMER, onTick); toolbar.message_text.text = "Вы подорвались на мине!"; gameOver = true; } // конец мины ; } } } } private function onTick(e:TimerEvent):void { toolbar.message_text.text = "Время игры: " + e.target.currentCount + " сек."; } private function floodFill(row,col:uint):void { var emptyTile:tile_movieclip; emptyTile = game_container.getChildAt(row * FIELD_W + col) as tile_movieclip; if (emptyTile.currentFrame == 1) { emptyTile.removeEventListener(MouseEvent.CLICK, onTileClicked); emptyTile.buttonMode = false; emptyTile.gotoAndStop(2); if (mineField[row][col] > 0) { emptyTile.tile_text.text = mineField[row][col].toString(); } else { emptyTile.tile_text.text = ""; } if (mineField[row][col] == 0) { for (var ii:int = -1; ii <= 1; ii++) { for (var jj:int = -1; jj <= 1; jj++) { if (ii != 0 || jj != 0) { if (tileValue(row + ii, col + jj) != 9) { if (tileValue(row + ii, col + jj) != -1) { floodFill(row + ii, col + jj); } } } } } } } } } } в конструкторе здесь в stage обращаться нельзя п.с. никаких вебмани не надо. Форум на то и создан, чтобы помогать просто так. |
|
|||||
|
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
caseyrya
А чем декомпилировали saper.swf ? Или после , декомпиляции переписали класс ? |
|
|||||
|
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Я понял , просто прозевал его, вы 100 % правы .
|
![]() |
![]() |
Часовой пояс GMT +4, время: 08:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|