Навигационные стрелки ?
-q12-
У меня есть UserControl с именем Background и простой класс NavigationArrows.
Этот класс NavigationArrows загружает кучу изображений*. png, отображающих некоторые стрелки, которые горят или не горят, в зависимости от нажатия клавиши пользователем.
Фон UC содержит большое фоновое изображение и панорамирует его через событие Background_KeyPress.
----
То, что я хочу, просто:
Я хочу соединить стрелки с событием нажатия клавиши.
(чтобы показать светящееся изображение стрелки при нажатии клавиши)
----
Но !
Я могу сделать это очень просто, все внутри UC. Но я этого не хочу.
Я хочу, чтобы класс NavigationArrows содержал все аспекты стрелок!!!!
загрузка изображений, то !!!События!!!, положение на холсте, размер стрелок и все остальное, о чем я сейчас не могу думать. Одним словом, содержать все свойства, события, методы, которые связаны с классом arrows / (или объектом, если хотите).
Моя большая проблема - это связи между двумя классами. Как соединить их простым и элегантным способом, логически, не путая.
Мой способ связать эти 2 класса очень запутан в коде. Слишком много споров тут и там. (Это не сбивает с толку из-за названий, которые я дал - не то) Это сбивает с толку из-за структуры, которую я должен построить !!! Он чрезвычайно запутан и wtf на каждом углу.
----
Прямо сейчас, на этой стадии я представляю код, это начало.
Но мне придется загрузить и связать остальные изображения стрелок (я не показывал этого здесь)-это еще не сценарий. Но я знаю по опыту, что она очень быстро агломерируется.
Кроме того, мне придется загружать и другие классы/объекты в canvas. Этот класс Arrow-всего лишь тест. Если мне нужно загрузить 100 классов, каждый из которых содержит свой собственный набор изображений (скажем, 50 img На класс), и со своими собственными методами и свойствами, и со своими собственными !!События!!, что они должны быть соединены с фоновым объектом (каким-то образом).
Вы понимаете, что я имею в виду под логическим путем и без путаницы ?
Это должно быть похоже на включение/выключение этой связи между объектом и классом. Что-то вроде:
UI. NavigationArrows navArrows = новый UI.NavigationArrows();
наварроуз.Активный();
navArrows.номер позиции(0,0);
navArrows.размер(20,20);
И это все. И они должны выполнять и выполнять свою работу!
Как я могу этого достичь?
Спасибо,
-q12-
Что я уже пробовал:
public partial class Background : UserControl //................... //UI.NavigationArrows navArrows = new UI.NavigationArrows(); Rectangle navArrowsRectangle = new Rectangle(10, 10, 100, 100); void Background_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawImage(q1.backgroundImage, q1.rectangle);//BackgroundImage string imgName = "UI\\NavigationArrows OFF.png"; Image BaseImg = Image.FromFile(imgName); e.Graphics.DrawImage(BaseImg, navArrowsRectangle);//NavigationArrows OFF } void Background_KeyPress(object sender, KeyPressEventArgs e) { int th12 = 0; if (e.KeyChar == 'w') { if (q1.rectangle.Y < 0) q1.rectangle.Y += q1.amount; else q1.rectangle.Y = 0; } if (e.KeyChar == 's') { th12 = -q1.imgy + this.Height; if (q1.rectangle.Y > th12) q1.rectangle.Y -= q1.amount; else q1.rectangle.Y = th12; } if (e.KeyChar == 'a') { if (q1.rectangle.X < 0) q1.rectangle.X += q1.amount; else q1.rectangle.X = 0; } if (e.KeyChar == 'd') { th12 = -q1.imgx + this.Width; if (q1.rectangle.X > th12) q1.rectangle.X -= q1.amount; else q1.rectangle.X = th12; } this.Refresh();//forPaintEvent }
и это мой второй класс, который я хочу переделать, чтобы он стал "сам по себе".
Я имею в виду, что он должен подключаться и играть в фоновом классе.
public class NavigationArrows { public void InitializeNavigationArrows() { string imgName = "UI\\NavigationArrows OFF.png"; BaseImg = Image.FromFile(imgName); } public Image BaseImg;
Ralf Meier
Для моего понимания ... из-за твоего сообщения я немного запутался.
Что вы хотите переместить с помощью управления стрелками ? Что-то на форме, где находится стрелка-контроль ?
Должен ли этот элемент управления со стрелками всегда работать с клавишами - независимо от того, имеет ли этот элемент управления фокус или нет ?
_Q12_
.. и дать вам конкретные ответы на ваши вопросы.:
вы" - что вы хотите переместить с помощью стрелки-управления ? "
я: - ничего на данный момент - я хочу,чтобы они загружались при каждом конкретном нажатии клавиши.(w,a,s, d и комбинации).
вы" - что-то на форме, где находится стрелка-контроль ?"
я-на форме, на фоновом контроле, везде есть позиция ВКЛ.
вы "должны ли этот стрелочный контроль всегда работать с клавишами?
- независимое, имеет ли этот контроль фокус или нет ?"
я-да, работаю с ключами. И да, независимо от Фокуса.
_Q12_
Фон-это UserControl; NavigationArrows - это класс (но может быть чем угодно - и контроль тоже), но в моем примере, чтобы было легко объяснить, это класс.
На данный момент класс NavigationArrows должен реагировать на нажатие пользователем клавиши и вызывать соответствующее изображение на каждую нажатую клавишу.
Если 'ж' нажата, стрелка становится видимым, когда " п " выпущен, "NavigationArrows выкл.ПНГ" отображается по умолчанию. Очень просто!
Я ничего не говорил о функциональности стрелок (когда пользователь нажимает на стрелку мышью - она должна перемещать вещи) Ещё нет. Но разве это очень хороший момент, что когда-нибудь он будет реализован?
Мой вопрос не о стрелках как таковых, а об управлении кодом, файлами и когда все агломерировано, чтобы управлять им и поддерживать его достаточно чистым.
Когда у меня будут загружены все 9 изображений для стрелок, каждое из них должно быть связано с событием нажатия клавиши и срабатывать при нажатии определенной клавиши и комбинации клавиш (например, "wa" или "sd").
И поверьте мне, когда я говорю, что 9 изображений создают хаос в коде, если они не "должным образом" (я еще не знаю, как это сделать) управляются и планируются.
А 9-это просто и мало, но что делать, когда у меня есть 50 других класов, для персонажей, врагов, пуль, взрывов и т. д... Как я буду [интегрировать] их все на одной странице кода и [видеть] их без путаницы. Все, что я могу сделать со своими знаниями до сих пор, - это хороший кодовый суп, с большой головной болью и крайней интенсивной концентрацией, когда он должен быть более расслабленным и упорядоченным. Но я еще не знаю этого - ты должен умно пукнуть для меня. И я поймаю его и буду счастлив. :)))
Ralf Meier
ОК... Я пытаюсь возобновить то, что вы сказали :
- обычно на экране ничего не видно
- если вы нажмете (например) клавишу "w", то Стрелка вверх-картинка появится в определенном положении на экране. То же самое и с другими ключами.
Если вы скажете ему" Да", вы должны сделать что-то вроде этого :
- ключи обычно принадлежат элементу управления, который имеет фокус. Самый простой способ решить эту проблему: эта функциональность является частью формы. Другие формы, которые должны иметь ту же функциональность, могут быть получены из этой формы.
- изображения, которые вам нужны для этого, могут принадлежать к этому классу (возможно, это может быть компонент - который позволит вам сделать некоторые настройки с помощью пользовательского интерфейса)
Я думаю, вы пытаетесь разработать своего рода игру.
В данный момент мне очень трудно быть более конкретным, потому что я не могу себе представить, какова ваша цель на данный момент и какая является конечной целью.
_Q12_
вы- " если вы нажмете (например) "w", то Стрелка вверх-картинка появится в определенном положении на экране. То же самое и с другими ключами."
я-правильно!
вы: "ключи обычно принадлежат элементу управления, который имеет фокус. "
мне - очень хорош этот пункт! Мой управления, что упор будет сделан на фоне управления. На этом элементе управления я уже рисую большое фоновое изображение. Теперь я нарисую вторичное изображение под названием NavigationArrows. Но я хочу нарисовать его снаружи этого фона UC. Я хочу рисовать с урока. Что-то такое, что соберет воедино все мелкие детали об этой стреле.
BillWoodruff
1. это Windows Forms ? Что такое "основная форма"; что такое любые другие формы ?
1. а где же фон пользовательского элемента управления расположены ? на "основной форме"?
2. визуальные элементы "клавиши со стрелками" также являются пользовательскими элементами управления ? или, их тянет на пользовательский элемент управления или форму с помощью краски.
_Q12_
да, его оконные формы. На фоне пользовательский элемент управления создается на форму form1, да. NavigationArrows-это простой класс. Он используется внутри события paint из фонового элемента управления.
Background_Paint недействительным(объект отправителя, объект painteventargs е)
{
е.Графика.Функция drawImage(БГ.раздел backgroundimage БГ.прямоугольник); //раздел backgroundimage
е.Графика.DrawImage (наварроу.Active (), navArrowsRectangle); / / NavigationArrows
}
BillWoodruff
Я думаю, что если вы поместите какой-то "визуальный индикатор" в пользовательский интерфейс, он должен реагировать на то, что пользователь нажимает на него. Я бы хотел, чтобы щелчок по вашим навигационным стрелкам вызвал событие "щелчок", на которое можно подписаться везде, где обрабатываются события клавиатуры для вашего приложения.
_Q12_
Я также представил решение!
Но это неправильно... Ну, это правильно и работает так, как там написано, но не удовлетворяет моим потребностям.Вы можете понять, что я делаю из этого решения, потому что там весь фоновый UserControl.
BillWoodruff
Я думаю, что есть гораздо более простой способ сделать это без использования краски.
Но сначала вам нужно отредактировать и упростить описание того, что вы пытаетесь реализовать.
Является ли "фоновый элемент управления" контейнером, содержащим растровое изображение ,и вы хотите, чтобы клавиши со стрелками перемещали изображение?
_Q12_
Я могу панорамировать растровое изображение фонового изображения, то есть внутри контейнера "BackGround Control". Я уже сделал это. Я действительно включил частичный код для этого аспекта здесь:
(вы можете увидеть это в моем запросе и в моем решении)
Background_Paint недействительным(объект отправителя, объект painteventargs е)
{
е.Графика.Функция drawImage(БГ.раздел backgroundimage БГ.прямоугольник); //раздел backgroundimage
}
и все, что находится внутри:
void Background_KeyDown(отправитель объекта, KeyEventArgs e)
речь идет об этом растровом изображении,перемещаемом клавишами (w,a,s, d).
Однако проблема немного сложнее,чем использование растровых изображений, стрелок или события Paint, потому что это маленькие винтики. Меня больше интересует коробка, в которой находятся эти шестеренки, и связь между коробками.
Прямо сейчас, в моем решении я уже сделал класс
UI. NavigationArrows, который содержит пути к изображениям и некоторые методы подключения к UControl. Но этот класс больше похож на расширение. Я хочу его "самого по себе".
Все, что я хочу, это "инкапсулировать" /или/собрать все [navArrow] из фонового UControl и сделать один класс/или/объект/или что угодно и иметь чистый UControl, только с 1 или 2 ссылками на этот класс navArrow.
_Q12_
Я также обновил свое решение!
Я поместил туда весь UserControl. Вы можете видеть все, и фоновое растровое изображение тоже. Видимо, все не так просто, как я думал. Спасибо.
BillWoodruff
Ваш код теперь гораздо более читабелен ! Я постараюсь ответить в ближайшее время.
твое здоровье, Билл
_Q12_
Большое спасибо! Пожалуйста, не торопитесь. Теперь я знаю, что ответить на этот вопрос нелегко. Но это мне очень поможет.(и все, кто заинтересован)