Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.220.66.151] |
|
Сообщ.
#1
,
|
|
|
Здравствйте. Сделал приложение во флекс (была необходимость в последствии использовать его на планшете). Суть такова - картинка слева, справа описание. Все нормально работает добавил полосы прокрутки, т.к. оно не помещается в стандартное окно и , казалось бы все хорошо, но только на персоналках. Содержимое можно просматривать(скроллить) колесиком мышки или используя полосу прокрутки.... На планшете возможности прокручивать касанием в любом месте окна нет - только используя полосу прокрутки, а это очень неудобно... Что я не сделал или сделал не так?
Спасибо. |
Сообщ.
#2
,
|
|
|
Попробуй на событие TransformGestureEvent.GESTURE_PAN повесить обработчик, который будет выполнять скроллинг по данным события.
|
Сообщ.
#3
,
|
|
|
Цитата Vesper @ Попробуй на событие TransformGestureEvent.GESTURE_PAN повесить обработчик, который будет выполнять скроллинг по данным события. Т.е., общий алгоритм действий,- создаю объект класса Sprite с координатами/параметрами экрана планшета, далее создаю функцию, к которой прикручиваю событие TransformGestureEvent с обработчиками? |
Сообщ.
#4
,
|
|
|
Цитата atis @ далее создаю функцию, к которой прикручиваю событие TransformGestureEvent с обработчиками? ...которую назначаешь обработчиком указанного события. Дальше читай мануалы, какие параметры у этого события, как указывается, куда был сделан жест и как быстро, чтобы тебе вычислить мощность прокрутки, и крути потом внутри своего приложения. Мало того, этот обработчик можно попробовать (не факт, что получится, правда) повесить на Stage. |
Сообщ.
#5
,
|
|
|
Цитата Vesper @ В качестве примера во вложении сброшу кусок кода со Stage- нашел в примерах и попытался подстроить под себя (выскочило 2 ошибки об использовании -this- ) Скрытый текст <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="1020" height="520" preloaderChromeColor="#CEF6F3"> <fx:Style source="newpr.css"/> <fx:Script> <![CDATA[ import flash.display.Sprite; import flash.events.TouchEvent; import flash.ui.Multitouch; import flash.ui.MultitouchInputMode; Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; this.stage.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); this.stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); private function onTouchBegin(e:TouchEvent):void { var dot:Sprite = new Sprite(); dot.x = e.stageX; dot.y = e.stageY; this.stage.addChild(dot); dot.startTouchDrag(e.touchPointID, true); this.dots[e.touchPointID] = dot; } private function onTouchEnd(e:TouchEvent):void { var dot:Sprite = this.dots[e.touchPointID]; this.stage.removeChild(dot); } ]]> </fx:Script> <s:Window> <s:systemChrome>none</s:systemChrome> <s:transparent>true</s:transparent> <s:x>0</s:x> <s:y>0</s:y> <s:height>520</s:height> <s:width>1020</s:width> </s:Window> <mx:TabNavigator x="0" y="16" width="1018" height="480" backgroundColor="#DAF1F5" chromeColor="#A5D0EE" contentBackgroundColor="#D8F6F1" focusColor="#1C63A5" > <mx:Canvas width="100%" height="100%" label="Новинки" chromeColor="#B3D4EB" fontFamily="Arial" fontSize="12" fontStyle="normal" fontWeight="normal" textDecoration="none"> <mx:Image x="10" y="10" width="330" height="440" source="jpg/17.jpg"/> <s:Label x="352" y="10" width="378" height="439" chromeColor="#B3D4EB" fontFamily="Arial" fontSize="12" fontWeight="normal" text=" №17 ЭКИПАЖ. textAlign="left" verticalAlign="middle"/> <s:Image x="10" y="466" width="330" height="440" source="jpg/18.jpg"/> <s:Label x="352" y="466" width="378" height="439" fontFamily="Arial" fontSize="12" fontWeight="normal" text="№18 БЕЛОСНЕЖКА И ОХОТНИК. Т verticalAlign="middle"/> |
Сообщ.
#6
,
|
|
|
Какие ошибки выдает? Как-то нелогично читать "неверное использование this". Вероятно, у тебя этот код не в классе лежит, а где-то ещё, поэтому и this недоступен. В принципе, если тебе прокручивать столько же, сколько сдвинул, это решение подойдет.
|
Сообщ.
#7
,
|
|
|
Код я привел сначала как он есть далее идут картинки и текст, думаю нет смысла до конца постить Canvas Imagt и Label.
А ошибка такая: 1042 -Ключевое слово this не может использоваться в статических методах. Оно может использоваться только в методах экземпляров, закрытиях функций и глобальном коде. http://Справочник по ActionScript® 3.0 |
Сообщ.
#8
,
|
|
|
Ну да, а в класс эту структуру кто включать будет?
|
Сообщ.
#9
,
|
|
|
Доброго времени... Класс я создал (в настоящий момент он пустой), а как туда структуру эту включить никак не могу разобраться - штудирую мануалы, но , видно чего-то не понимаю... в приложении скрин, код я приводил в спойлере выше... Помогите новичку, если можете...newpr
Спасибо. |
Сообщ.
#10
,
|
|
|
Повторяю ссылку в предыдущем посте она не открывается - ссылка за спойлером
Скрытый текст Добавлено Или мне всю данную структуру включая переменный и функции поместить в созданный класс Скрытый текст package { public dynamic class newpr { public function newpr() { } } } |
Сообщ.
#11
,
|
|
|
С классом разобрался билдер ошибок не выдает вроде так - , а как заставить процедуру работать - пока не разобрался... просто после <s:Window/> обратиться к созданному классу?
Добавлено ой... за спойлером Скрытый текст Добавлено Прошу прощения ... не посмотрел, что радикал обрезает изображения здесь видно нормально.... Скрытый текст вопрос прежний - как заставить процедуру работать... Спасибо. |
Сообщ.
#12
,
|
|
|
Как я понимаю, твой newpr должен расширять что-либо из наследников DisplayObject, чтобы была доступна stage, и заодно EventDispatcher - то есть, одним из вариантов будет "extends Sprite". Потом, да, его нужно добавить на сцену. При этом в момент создания твоего объекта сцена недоступна, значит, нужно вешать listener'ы в ответ на событие ADDED_TO_STAGE, потому что в его обработчике уже установлен указатель на stage.
public class newpr extends Sprite { private var dots:Array; public function newpr() { dots=new Array(); if (stage) addedToStage(); else addEventListener(Event.ADDED_TO_STAGE,addedToStage); } private function addedToStage(e:Event=null):void { removeEventListener(Event.ADDED_TO_STAGE,addedToStage); // а вот отсюда добавляешь все свои настройки Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; this.stage.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); this.stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); } private function onTouchBegin(e:TouchEvent):void { var dot:Sprite = new Sprite(); dot.x = e.stageX; dot.y = e.stageY; this.stage.addChild(dot); dot.startTouchDrag(e.touchPointID, true); this.dots[e.touchPointID] = dot; } private function onTouchEnd(e:TouchEvent):void { var dot:Sprite = this.dots[e.touchPointID]; this.stage.removeChild(dot); } |
Сообщ.
#13
,
|
|
|
Здравствуйте. Спасибо за помощь. Я добавил Ваши изменения в пакет... были вопросы у билдера к Event.ADDED_TO_STAGE и поскольку я не знал в каком он классе я сделал import flash.events.*
В итоге получилось следующее: Скрытый текст Есть вопросы: 1. В разделе "Схема" - левая нижняя часть билдера, часть параметров отображена красными метками, хотя ошибок билдер после добавления класса больше не выдает, что-то еще нужно исправить?.. 2. Я так не и разобрался как использовать созданный класс в данном проекте. Основная задача - чтобы на планшете содержимое перемещалось от прикосновений/перемещений пальцем по экрану. Мне нужно вызвать данный класc перед Tabnavigator или необходимо присвоить id для Canvas и вызывать его как метод для Canvas: var id_Canvas:newrp =new newpr(); id_Canvas Большое спасибо за помощь! |
Сообщ.
#14
,
|
|
|
Цитата atis @ Кроме того я определил переменную dot как квадрат с размерами экрана на котором выводится приложение: var dot:Sprite = this.getRect(0,0,520,1020); Правильно ли это в данном случае? this.getRect() возвращает объект типа Rectangle, а далеко не Sprite, который можно таскать. То есть нет. Цитата atis @ Хорошо. По идее, Event.ADDED_TO_STAGE находится в классе Event (flash.events.Event), но и полный импорт не повредит. я сделал import flash.events.* Цитата atis @ как обратиться к методам класса newpr? Если быть более точным, тебе нужно получать наличие и перемещение объектов из массива id_Canvas.dots, которые к тому же являются "детьми" id_Canvas. Ты добавляешь экземпляр этого класса на сцену с координатами (0,0), он регистрирует прослушиватели на касание и порождает дочерние элементы класса Sprite, которые можно достать, используя id_Canvas.numChildren и id_Canvas.getChildAt(), документацию по использованию смотри ТУТ (англ.) или ТУТ (рус.), после чего ты всегда знаешь, в каких точках у тебя пользователь держит пальцы. Дальше на основании этих данных выполняй скроллинг как умеешь. |
Сообщ.
#15
,
|
|
|
var dot:Sprite = this.getRect(0,0,520,1020); исправить на var dot:Sprite = this.getRect; или var dot:Sprite = new Sprite; как это было у меня раньше?
|
Сообщ.
#16
,
|
|
|
Как раньше. Ты хотя бы документацию по языку почитай, прежде чем карго-кодить.
|
Сообщ.
#17
,
|
|
|
Прошу извинить меня, если что-то не так или я Вас чем-то обидел.
(с)"Ты хотя бы документацию по языку почитай"... (с) - Обязательно!.. Именно этим и занимаюсь, иначе я бы не смог задать ни одного вопроса. К сожалению, мне не все понятно, поэтому я здесь. Дело в том , что , скажем у Коула в " Изучаем Flex " (изначально это приложение делалось как флекс) в руководстве по разработке рассматривается достаточно простой пример, добавляющий полосу прокрутки - и больше ничего. Все, что там я нарыл - больше подходит для кнопок/ссылок - нажал/отпустил. В книге "Flex 3. Сборник рецептов", то , что касается моей проблемы,- рассматривается масса примеров для событий клавиатура/мышь и ничего для обработки событий от сенсорных экранов... Все, что работает на обычных настольных "писюках" успешно не работает на планшетах... Кроме того чать примеров не работает из-за ошибок в коде.примеров, о чем успешно сообщает билдер. Лирическое отступление: Скрытый текст Естественно, что я их испытывал с нулевым результатом... Скажем, для меня стало неожиданностью то, что приложение не скроллится на планшете в win7, у знакомого на win8 оно пошло без проблем и без добавления каких-либо дополнительных процедур. Но, к сожалению, есть 2 планшета и есть win7, а поскольку я их (планшеты) купил, то я во всем и виноват ... - проблема стала моей. И мало кого волнует, что я админ, а не программист. Я прекрасно отдаю отчет в том, что на данном этапе и с таким уровнем познания я данную проблему решить не могу.. Но не смотря на все вышеизложенные "сопли" данная тема меня очень заинтересовала, поэтому я здесь и очень Вам благодарен за помощь. |
Сообщ.
#18
,
|
|
|
Скрытый текст я, собственно, тоже админ, а не программист, не сложилось немного, и actionscript учил точно так же, читая документацию и просматривая примеры кода. То, что приложение работает на вин8, но не работает на вин7, довольно любопытно - может быть, вин8 сама скроллит окно, вместо Flash? Как, кстати, у вас изначально реализована прокрутка мышью? И как реализован скроллбар? Трюк в том, что я не знаю именно Flex, там компонентов прорва, и кое-какая функциональность там встроена. А вообще, работать с мышью и тачпэдом это примерно одно и то же, просто мышь генерирует события MouseEvent.MOUSE_DOWN, MOUSE_UP, а тачпэд TouchEvent.TOUCH_BEGIN, TOUCH_END, с единственной (ИМХО) разницей в доступе к координатам, в TouchEvent есть touchPointID, а в MouseEvent его нет. Остальные координатные переменные одинаковы. |
Сообщ.
#19
,
|
|
|
Скрытый текст Из полученных за последнюю неделю сведений меня это тоже удивляет , но как есть... - либо винду допилили, добавив методы , что она идентифицирует объекты, с которыми работает... Добавлено Вся беда в том, что это нужно (с) вчера! "вынь и полошь" (с) Отсюда сумбур и непонимание... |
Сообщ.
#20
,
|
|
|
Доброго времени суток... Промучился в выходные так нужного результата не получил... Сказывается нулевой опыт работы с AS, но тем не менее да плюс народ еще подрасстроил относительно созданного класса
Цитата .... Бред какой-то... непорадовало еще и то, что используя чисто флексовские методы не удалось добиться обычного перемещения Canvas хотя ошибок в коде нет: запуск к.-л. команд осуществляется внутри методов. Так что ваш класс должен вызывать ошибку не заивисимо от типа проекта. Скрытый текст <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init()" width="1020" height="520" preloaderChromeColor="#CEF6F3" xmlns:local="*"> <fx:Style source="newpr.css"/> <fx:Declarations> <!-- Разместить невизуальные элементы (например, службы или объекты значений) --> </fx:Declarations> <s:Window id="map"> <s:systemChrome>none</s:systemChrome> <s:transparent>true</s:transparent> <s:x>0</s:x> <s:y>0</s:y> <s:height>520</s:height> <s:width>1020</s:width> </s:Window> <mx:TabNavigator x="0" y="16" width="1018" height="480" backgroundColor="#DAF1F5" chromeColor="#A5D0EE" contentBackgroundColor="#D8F6F1" focusColor="#1C63A5" > <fx:Script> <![CDATA[ import flash.geom.Rectangle; private function init():void{ c1.addEventListener(MouseEvent.MIDDLE_MOUSE_DOWN, oMD); } private function oMD(e:MouseEvent):void { c1.startDrag(false, new Rectangle(0,0,520,1020)) } ]]> </fx:Script> <mx:Canvas id="c1" width="100%" height="100%" label="Новинки" chromeColor="#B3D4EB" fontFamily="Arial" fontSize="12" fontStyle="normal" fontWeight="normal" textDecoration="none"> <mx:Image x="10" y="10" width="330" height="440" source="jpg/17.jpg"/> <s:Label x="352" y="10" width="378" height="439" chromeColor="#B3D4EB" fontFamily="Arial" fontSize="12" fontWeight="normal" а процедура прокрутки (handleScroll и для Canvas я его , вроде, определил ... - определяет направления движения -скроллинга- в зависимости от данных 2 метода... второй - это , собственно, scrollChildren - который определяет объекты на Canvas, считает их размеры и передает в метод 1 ...) объектов внутри Canvas вызывает ошибку Цитата Ошибка в строке 15 ....код ниже:1020: Метод, который помечен на переопределение, должен переопределять другой метод. newpr.mxml [ Скрытый текст CODE=cpp] <mx:Canvas id="c1" scroll="handleScroll(event)" width="100%" height="100%" label="Новинки" chromeColor="#B3D4EB" fontFamily="Arial" fontSize="12" fontStyle="normal" fontWeight="normal" textDecoration="none"> <fx:Script> <![CDATA[ import mx.core.Container; import mx.events.ScrollEvent; private var dir:String; private function handleScroll(event:ScrollEvent):void { dir = event.direction; } override protected function scrollChildren():void { var i:int = 0; do { var comp:DisplayObject = getChildAt(i); if (comp is Container) { trace (Container(comp).maxVerticalScrollPosition); dir == "horizontal" ? Container(comp).horizontalScrollPosition = c1.horizontalScrollPosition * (Container(comp).maxHorizontalScrollPosition)/c1.maxHorizontalScrollPosition: (Container(comp).verticalScrollPosition) = c1.verticalScrollPosition * (Container(comp).maxVerticalScrollPosition) / c1.maxVerticalScrollPosition; } i++; } while (i < numChildren) } ]]> </fx:Script> <mx:Image x="10" y="10" width="330" height="440" source="jpg/17.jpg"/> <s:Label x="352" y="10" width="378" height="439" chromeColor="#B3D4EB" fontFamily="Arial" fontSize="12" fontWeight="normal" text=" №17 ЭКИПАЖ. [/CODE] В общем как-то так пока . Что качается Вашего предложения, то полного понимания у меня нет, поэтому давайте постепенно, а Вы, если Вам не сложно, поправьте, что не так... И может быть, если не затруднит, посмотрите выложенный выше код, скорее всего я что-то сделал не так. Давайте так : 1) Вы писали: Цитата значит мне необходимо на первом этапе не в классе , а в MXML создать массив dots и заполнить его элементами Canvas . Так? ебе нужно получать наличие и перемещение объектов из массива id_Canvas.dots, |
Сообщ.
#21
,
|
|
|
Цитата atis @ override protected function scrollChildren():void Слово override означает "для этого класса использовать этот метод, если при обращении к предыдущему в иерархии классу указан вызов такого же метода", и в случае, если такого метода нет, override не нужен - удали. А если есть, то нужно правильно написать сигнатуру перекрывающего метода - все параметры и результат должны совпадать по типу. Цитата atis @ непорадовало еще и то, что используя чисто флексовские методы не удалось добиться обычного перемещения Canvas хотя ошибок в коде нет: Мало сделать startDrag, нужно на отпускание кнопки вызывать stopDrag() тоже. Кстати, когда освоишь, можешь позже использовать startTouchDrag() вместо startDrag(). Цитата atis @ значит мне необходимо на первом этапе не в классе , а в MXML создать массив dots и заполнить его элементами Canvas . Так? Нет, твой класс его сам должен создать и поддерживать. Это достигается внутри кода функции onTouchBegin() где создается пустой объект типа Sprite и пихается в dots и список показа (через addChild()) Вторая функция убирает ненужный объект из массива. Цитата atis @ dir == "horizontal" ? Container(comp).horizontalScrollPosition = c1.horizontalScrollPosition * (Container(comp).maxHorizontalScrollPosition)/c1.maxHorizontalScrollPosition: (Container(comp).verticalScrollPosition) = c1.verticalScrollPosition * (Container(comp).maxVerticalScrollPosition) / c1.maxVerticalScrollPosition; if (dir=="horizontal") Container(comp).horizontalScrollPosition = c1.horizontalScrollPosition * (Container(comp).maxHorizontalScrollPosition)/c1.maxHorizontalScrollPosition; else Container(comp).verticalScrollPosition = c1.verticalScrollPosition * (Container(comp).maxVerticalScrollPosition) / c1.maxVerticalScrollPosition; Там же - использовать do..while цикл имеет смысл только тогда, когда в numChildren заведомо не ноль, иначе получишь null pointer exception. Может быть и так, что у тебя он не будет нулем в принципе. |
Сообщ.
#22
,
|
|
|
Цитата else Container(comp).verticalScrollPosition Ошибка 1120 Обращение несуществующего свойства verticalScrollPosition Странно, тогда почему компилятор не ругался на horizontalScrollPosition? Добавлено Может как то здесь надо еще добавить if (dir == "VERTICAL") ? только не пойму как ... |
Сообщ.
#23
,
|
|
|
ссылка:
Скрытый текст |
Сообщ.
#24
,
|
|
|
Здравствуйте.
Пример 1. Я вытащил ранее исправленную Вами структуру из класса положил ее в mxml-файл. были ошибки я их исправил. Сейчас в компиляторе ошибок нет. Тем не менее, пока проект с тачскрином не работает. Видимо я не смог завязать скрипт с содержимым, а может есть еще какие-то неточности. Очень прошу Вас посмотреть и поправить если что не так. Спасибо. Код во вложении + картинка за спойлером. В принципе, там ничего особенного, несколько канвасов ->внутри которых картинки и текст. Скрытый текст код Скрытый текст <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="1020" height="520" preloaderChromeColor="#CEF6F3"> <fx:Style source="newpr.css"/> <fx:Script> <![CDATA[ import flash.display.Sprite; import flash.events.*; import flash.events.TouchEvent; import flash.ui.Multitouch; import flash.ui.MultitouchInputMode; private var dots:Array; public function ne1wpr():void { dots=new Array(); if (stage) addedToStage(); else addEventListener(Event.ADDED_TO_STAGE, addedToStage); } private function addedToStage (e:Event=null):void { removeEventListener(Event.ADDED_TO_STAGE, addedToStage); Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; stage.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); } public function onTouchBegin(e:TouchEvent):void { var dot:Sprite = new Sprite; dot.x = e.stageX; dot.y = e.stageY; stage.addChild(dot); dot.startTouchDrag(e.touchPointID, true); dots[e.touchPointID] = dot; } public function onTouchEnd(e:TouchEvent):void { var dot:Sprite = this.dots[e.touchPointID]; stage.removeChild(dot); } ]]> </fx:Script> <mx:TabNavigator x="0" y="16" width="1018" height="480" backgroundColor="#DAF1F5" chromeColor="#A5D0EE" contentBackgroundColor="#D8F6F1" focusColor="#1C63A5" > <mx:Canvas width="100%" height="100%" label="Новинки" chromeColor="#B3D4EB" fontFamily="Arial" fontSize="12" fontStyle="normal" fontWeight="normal" textDecoration="none"> <mx:Image x="10" y="10" width="330" height="440" source="jpg/17.jpg"/> <s:Label x="352" y="10" width="378" height="439" chromeColor="#B3D4EB" fontFamily="Arial" fontSize="12" fontWeight="normal" text=" №17 ЭКИПАЖ. Опытный пилот Бео " textAlign="left" verticalAlign="middle"/> <s:Image x="10" y="466" width="330" height="440" source="jpg/18.jpg"/> <s:Label x="352" y="466" width="378" height="439" fontFamily="Arial" fontSize="12" fontWeight="normal" Пример2 Единственное , что пока получилось и работает , но не так , как хотелось бы , - это перемещение объекта... Единственное никак не могу получить нормальную работу по оси Y . Т.е. необходимо чтобы по оси Y канвас не улетал за пределы бордера, чтобы его можно было зацепить. Что нужно тут поправить? Спасибо. Скрытый текст <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <fx:Declarations> <!-- Разместить невизуальные элементы (например, службы или объекты значений) --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.events.DragEvent; protected var shiftX:Number; protected var shiftY:Number; protected function onBox1MouseDown(event:MouseEvent):void { shiftX = event.localX; shiftY = event.localY; stage.addEventListener(MouseEvent.MOUSE_UP,onMouseClick); stage.addEventListener(MouseEvent.MOUSE_MOVE,onMoveInParentBox1); } protected function onMoveInParentBox1(event:MouseEvent):void { box1.x = parentBox.mouseX - shiftX < 0 ? 0 : parentBox.mouseX - shiftX + box1.width > parentBox.width ? parentBox.width - box1.width : parentBox.mouseX - shiftX; box1.y = parentBox.mouseY - shiftY ; } protected function onMouseClick(event:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_UP,onMouseClick); stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMoveInParentBox1); } ]]> </fx:Script> <s:BorderContainer backgroundColor="#E7E9EB" width="100%" height="100%" > <mx:Canvas width="100%" height="100%" label="Новинки" chromeColor="#B3D4EB" fontFamily="Arial" fontSize="12" fontStyle="normal" fontWeight="normal" textDecoration="none"> <s:Group id="parentBox" width="100%" height="100%"> <s:BorderContainer id="box1" borderWeight="2" width="1008" height="1000" backgroundColor="0xCCCCCC" mouseDown="onBox1MouseDown(event)" > <s:Image x="10" y="33" width="191" height="199"/> <s:Image x="10" y="261" width="191" height="162"/> <s:Label x="333" y="80" width="246" height="152" text="wefewfewfewfewfewfwfw"/> </s:BorderContainer> </s:Group> </mx:Canvas> </s:BorderContainer> </s:WindowedApplication> |
Сообщ.
#25
,
|
|
|
Цитата atis @ box1.x = parentBox.mouseX - shiftX < 0 ? 0 : parentBox.mouseX - shiftX + box1.width > parentBox.width ? parentBox.width - box1.width : parentBox.mouseX - shiftX; box1.y = parentBox.mouseY - shiftY ; Смотри: в строке вверху присутствуют оба ограничителя, в строке внизу - ни одного. Поэтому и не лимитируется смещение по Y. Цитата atis @ . Видимо я не смог завязать скрипт с содержимым, а может есть еще какие-то неточности. Объект класса newpr присутствует на сцене? |
Сообщ.
#26
,
|
|
|
Цитата Не понял, что Вы хотели спросить. Дело в том, что все перенес из класса в тело MXMl, т.е в основной файл, чтобы к классу не обращаться, так сказать не импортировать его. Объект класса newpr присутствует на сцене? |
Сообщ.
#27
,
|
|
|
Тогда надо piksel'a звать, потому как если код в MXML, это уже Document class получается. Кстати, если в обе функции воткнуть по trace(), будут они вызываться? Если да, значит, тебе нужна ещё одна функция - слушатель Event.ENTER_FRAME, которая и будет заниматься скроллингом.
|
Сообщ.
#28
,
|
|
|
самое обидное, что в книгах по флексу ничего этого не! Там чистой воды AS/// порой авторы пишут классы в пакете , не удосуживаясь объяснять что это и куда вставлять и как ни методов не процедур. Получается я бы действительно созданный класс не смог бы вызвать, поскольку синтаксис был не тот, а билдер ошибок не давал (сначала давал пришлось немного синтаксис поправить,)... Лазая по вражеским сайтам обнаружил процедуру создания класса в- в классе package Classes {} ....
Но тем не менее Вы мне очень помогаете, прошу Вас не оставлять тему. В данный момент то что раньше было в классе, как я писал , теперь mxml... Я просто самостоятельно не могу разобраться, трудно мне на нулевом уровне, как созданный метод привязать к объектам - детям , что в данном случае будет объектом Child - по идее Canvas, мне же нужно чтобы их содержимое прокручивалось - картинки и текст или, все-таки картинки и текс, входящие в Canvas? Добавлено Цитата А как его позвать? Вы с ним общаетесь хоть как-то? Если да, то можете его попросить помочь?Тогда надо piksel'a звать спасибо. Добавлено в данный момент я сделал , и пока работает с бордерами перемещение одного относительно другого ... на втором разместил картинки и текст - работает ужасно, но по крайней мере пока не пристрелили но , обещали припомнить все и вычесть стоимость планшетников |
Сообщ.
#29
,
|
|
|
Кстати - странно как-то ты пример скопировал. Для интереса глянул, в примере есть событие TOUCH_MOVE и обработчик на нем, который собственно и двигает спрайты по экрану, чтобы можно было отследить, куда потащили палец и куда нужно скроллить, а у тебя он напрочь отсутствует. Поэтому, наверно, и не можешь понять, что дальше делать и почему вообще оно не фурычит.
Что тебе надо прокручивать, определяешь ты сам, и именно то и прокручиваешь. Проще всего это сделать, меняя координаты у одного выделенного объекта, пусть Canvas, который содержит ровно то, что требуется двигать. Для этого, правда, итебе придется узнать, попробовать и использовать такую штуку, как иерархия видимых объектов. |
Сообщ.
#30
,
|
|
|
Вот как , может я как раз урезанный пример нашел? можно ссылку, если не трудно.
Цитата Так на Canvas они все видимые, поскольку размещены на нем , другое дело что мне нужно прокручивать содержимое этого канваса или сам Canvas не мышкой, а на тачскирине пальцем. Причем в первоначальной версии на компьютере с этим проблем нет , съедается и скроллер и полоса прокрутки справа и я не могу понять это Canvas прокручивается или же содержимое на нем? попробовать и использовать такую штуку, как иерархия видимых объектов. |
Сообщ.
#31
,
|
|
|
а что касается почему не работает функция, так по вышеописанной причине , она просто висит ни к какому объекту не привязанная ни к Canvas ни к Window ни к содержимону на Canvas я не могу понять как этот метод прицепить к содержимому.
|
Сообщ.
#32
,
|
|
|
Вот о чем я говорил , (применение созданного метода)
Скрытый текст |
Сообщ.
#33
,
|
|
|
Доброго времени суток. Нашел я этот пример целиком Multitouch and gesture support on the Flash Platform Там в правом верхнем углу есть архив с примерами, я его скачал, для того, чтобы посмотреть как оно работает, создал новый флекс проект elefant ,скопировал как по инструкции файлы в корень - src - и назначил GestureExample.as как проект по умолчанию и запустил debug , затем выполнить - и тишина белый экран. Будет время и возможность - посмотрите, плз... может что посоветуете.
Добавлено пример, конечно ,дикий... не плохо было его в действии посмотреть , т.к. я там только %30 понимаю |