![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2010
Сообщений: 13
|
Пишу игру со словами.
Она выглядит примерно так: внизу поле 5х5 букв. Надо поочерёдно выбрать буквы и собрать из них слово. Пролема в том, что база слов БОЛЬШАЯ, и из-за этого после каждого щелчка на букве игра подвисает. А ещё я не могу понять, почему при этом слова не опознаются ![]() Кто-нибудь сможет помочь? Код основного класса ниже: package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.net.URLLoader; import flash.net.URLRequest; public class WordGame extends MovieClip { private var lettersCages:Array=new Array(); private var lettersStartX:Array=new Array(); private var lettersStartY:Array=new Array(); private var lettersSelected:Array=new Array(); private var letterX:int=50; private var theWord:String=new String(); private var myDictionary:Array=new Array(); private var myXML:XML; public function WordGame() { iniDict(); buildCages(); } private function iniDict() { var xmlURL:URLRequest=new URLRequest("1.xml"); var xmlLoader:URLLoader=new URLLoader(xmlURL); xmlLoader.addEventListener(Event.COMPLETE, buildDict); } private function buildDict(event:Event) { myXML=XML(event.target.data); var tempString:String; tempString=myXML; myDictionary=tempString.split("\r"); } private function buildCages() { for (var y:int=0; y<5; y++) { for (var x:int=0; x<5; x++) { var cage:Cage=new Cage ; cage.x=150+x*50; cage.y=150+y*50; addChild(cage); lettersCages.push(cage); lettersStartX.push(cage.x); lettersStartY.push(cage.y); cage.addEventListener(MouseEvent.CLICK, clickCage); cage.Litera.text=String.fromCharCode(1039+Math.floor(Math.random()*26)); } } } private function clickCage(event:MouseEvent) { event.currentTarget.removeEventListener(MouseEvent.CLICK, clickCage); event.currentTarget.addEventListener(MouseEvent.CLICK, clickReturn); event.currentTarget.x=letterX; event.currentTarget.y=50; letterX+=50; lettersSelected.push(event.currentTarget); if (lettersSelected.length!=1) { lettersSelected[lettersSelected.length-2].removeEventListener(MouseEvent.CLICK, clickReturn); } searchWord(); checkWord(); } private function clickReturn(event:MouseEvent) { var a:int; event.currentTarget.x=20; a=lettersCages.indexOf(event.currentTarget); event.currentTarget.x=lettersStartX[a]; event.currentTarget.y=lettersStartY[a]; letterX-=50; if (lettersSelected.length!=1) { lettersSelected[lettersSelected.length-2].addEventListener(MouseEvent.CLICK, clickReturn); } lettersSelected.pop(); event.currentTarget.removeEventListener(MouseEvent.CLICK, clickReturn); event.currentTarget.addEventListener(MouseEvent.CLICK, clickCage); } private function checkWord() { for (var i:int=0;i<myDictionary.length;i+=10) { if (theWord==myDictionary[i]) { trace("Yes!"); Hit.text="Попадание!"; } else { Hit.text="Промах!"; } } } private function searchWord() { theWord=""; for (var d:int=0; d<lettersSelected.length; d++) { theWord=theWord.concat(lettersSelected[d].Litera.text); } trace(theWord); } } } |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Для скорости используйте ассоциативный массив, который на флэше называется Object. Почему не находит трейсте сами, код-то не компилится)
... private function buildDict(event:Event) { var tmpDictionary = event.target.data.split("\r"); for each(var word:String in tmpDictionary) { myDictionary[word] = true; } }
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 13
|
Спасибо! =)
Теперь работает намного быстрее. И, кстати, у меня код компилится - просто нужны объекты в flv файле =) Добавлено через 54 минуты Теперь ещё одна проблема. Как заставить компилятор адекватно сравнивать русский текс с русским текстом? Этот код прекрасно подходит для латиницы, но с русскими словами ничего не делает...Как это обойти? |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Отош =)
Понять, почему, для начала. Вообще оно должно для русского работать и не жужжать. Думаю, что-то с кодировками. Попробовать сохранить текстовик в utf-8. В цикле for each(var word:String in tmpDictionary) вывести word и его длину. При проверке тоже вівести слово и длину его итд.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 13
|
Заработало!!! =))))
Проблема была в том, что в объект помещались слова вместе с то ли пробелами, то ли другими невидимыми символами =) Теперь всё прекрасно работает. =) Большое спасибо, -De- =) |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:22. |
|
|
« Предыдущая тема | Следующая тема » |
|
|