![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Pork6 |
|
||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Язык: С++.NET.
И снова поднимаю эту тему. Возникли проблемы скорее понимания, чем синтаксиса, но тем не менее. Все по порядку. Есть задание - нарисовать круги, которые перемещаются и отталкиваются от стен (в перспективе - друг от друга). Кругов несколько. 1, 2, 3, может 4. Для начала, я решил сделать для себя пример с одним кругом. Создал форму, на ней элемент panel1 (для удобства обращения) и написал функцию рисования:
Так как круг должен перемещаться, то создал функцию с движением:
Как видите, функция движения принимает 2 була - х и у. Если бул тру, то сдвигаем шарик вправо, если фолс - влево. xCoord и уCoord - глобальные переменные. Ну а что бы он двигался, я создал таймер на 10мс, который выглядит так:
Собственно, всё. Какие недостатки? 1) Рисуется сплошная линия, а не шарик. Если до каждой отрисовки чистить panel1, то появляется мерзкое мерцание шарика. 2) Это только один шарик. Можно конечно таким же образом написать еще 3, но это, согласитесь, глупо, ведь если шариков понадобится 50 то.. Значит нужен класс. И вот тут у меня ступор, так как я совсем не понимаю, как этот самый класс написать. Весь вечер и пол-ночи пытался это сделать, но то Form1 не видит класс Krug, то класс Krug не видит panel1 с Form1. И наследование пробовал и файл отдельный создавал... Не помогает. Так что, прошу объяснить и привести пример (прототип программы, без кода, с описанием) реализации этой задачи. Заранее бОльшое спасибо. (текст ниже - не актуален, оставлен для истории) С кругами разобрался сам. Но появился вопрос по поводу Forms в С++.NET. А именно: В приложении 3 формы. "Privet", "Prepod" и "Student" При запуске приложения открывается форма "привет". На этой форме 2 кнопки: "Препод" и "Студент". Нужно, что бы по нажатию на кнопку "Препод" открывалась форма "Prepod", а по нажатию на кнопку студент - форма "Student". Какой код должен быть у обработчика кнопки "Препод" ? (все что ниже - не актуально) (------------------------------------------) Всем доброго времени суток. Где: CLR, Windows Forms. VS2008. Задача: нарисовать 3 (может больше) круга на поле. Заставить их двигаться и отталкиваться от бортиков (и друг от друга). Так как только вылез из консоли, то в графике мало понимаю. Почитал немного примеров и написал вот такой вот код:
Функцию движения пока опущу, но перерисовывается все это по таймеру. Это один круг. Решил нарисовать второй. И тут же столкнулся с проблемой. А именно - после отрисовки второго - первый не видно. Насколько я понял, виновата во всем эта строчка: "this->pictureBox1->Image = MyBmp;", где мы "натягиваем" на текстбокс наш кружок. Но как исправить это - не знаю. Есть идеи? И общие мысли по проекту. Может вообще все неправильно делаю? Спасибо. upd: Сделал так:
Соответственно, выводится это все на элементе panel1. Это сообщение отредактировал(а) Pork6 - 21.10.2009, 02:05 |
||||||||||
|
|||||||||||
mekhanikus |
|
|||
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: нет Всего: 1 |
Если сделать круги в виде круглых дочерних окон (SetWindowRgn), то можно запросто передвигать их в пределах родителя фкнкцией SetWindowPos.
При этом легко можно контролировать выход за переделы окна и столкновения. Только Ваш код мало похож на С++. Может Вы ошиблись разделом? |
|||
|
||||
Irdis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.5.2008 Репутация: нет Всего: 1 |
goto .net c вашими вопросами
|
|||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: нет Всего: 23 |
Pork6, храните круги в списке/массиве, а потом выводите их все вместе по циклу. Получается что вы все время все стираете а потом выводите только один рисунок.
Это сообщение отредактировал(а) ИванМ - 17.10.2009, 14:36 |
|||
|
||||
Pork6 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
(решил не создавать новую тему, так как вопрос простой)
С кругами разобрался сам. Но появился вопрос по поводу Forms в С++.NET. А именно: В приложении 3 формы. "Privet", "Prepod" и "Student" При запуске приложения открывается форма "привет". На этой форме 2 кнопки: "Препод" и "Студент". Нужно, что бы по нажатию на кнопку "Препод" открывалась форма "Prepod", а по нажатию на кнопку студент - форма "Student". Какой код должен быть у обработчика кнопки "Препод" ? |
|||
|
||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Pork6 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
У меня C++.NET, в этом и проблема. На C# у меня получалось, а вот C++.NET меня не слушает (
|
|||
|
||||
PaZ1T1V |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 26.2.2008 Где: Багдад ) Репутация: нет Всего: нет |
ну на C++ не будет ли это выглядеть так
а в конструкторе формы Prepod делаем следующее
у меня на C++ так работало, так же как и на C# Это сообщение отредактировал(а) PaZ1T1V - 18.10.2009, 15:24 --------------------
[size=8]Atention please!!![/size] [size=6]Кривые руки[/size] |
||||
|
|||||
Pork6 |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Язык: С++.NET.
И снова поднимаю эту тему. Возникли проблемы скорее понимания, чем синтаксиса, но тем не менее. Все по порядку. Есть задание - нарисовать круги, которые перемещаются и отталкиваются от стен (в перспективе - друг от друга). Кругов несколько. 1, 2, 3, может 4. Для начала, я решил сделать для себя пример с одним кругом. Создал форму, на ней элемент panel1 (для удобства обращения) и написал функцию рисования:
Так как круг должен перемещаться, то создал функцию с движением:
Как видите, функция движения принимает 2 була - х и у. Если бул тру, то сдвигаем шарик вправо, если фолс - влево. xCoord и уCoord - глобальные переменные. Ну а что бы он двигался, я создал таймер на 10мс, который выглядит так:
Собственно, всё. Какие недостатки? 1) Рисуется сплошная линия, а не шарик. Если до каждой отрисовки чистить panel1, то появляется мерзкое мерцание шарика. 2) Это только один шарик. Можно конечно таким же образом написать еще 3, но это, согласитесь, глупо, ведь если шариков понадобится 50 то.. Значит нужен класс. И вот тут у меня ступор, так как я совсем не понимаю, как этот самый класс написать. Весь вечер и пол-ночи пытался это сделать, но то Form1 не видит класс Krug, то класс Krug не видит panel1 с Form1. И наследование пробовал и файл отдельный создавал... Не помогает. Так что, прошу объяснить и привести пример (прототип программы, без кода, с описанием) реализации этой задачи. Заранее бОльшое спасибо. |
||||||
|
|||||||
Pork6 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Всё еще актуально.
|
|||
|
||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Потому что нужно стирать ранее нарисованное. И вообще лучше рисовать по событию Paint, а в таймере делать Invalidate(). Для того чтобы избавиться от этого нужно поставить свойство формы DoubleBuffered = true Я набросал примерчик с классом, правда там на C#, т.к. судя по постам для тебя C# знаком, то думаю тебе не составит труда разобраться. Присоединённый файл ( Кол-во скачиваний: 15 ) ![]() -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
Pork6 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
KelTron, большое спасибо. Большое-большое =)
Только не совсем понимаю, как написать этот код:
В реалиях C++.NET, где этого самого foreach не было и нет. Это сообщение отредактировал(а) Pork6 - 25.10.2009, 16:33 |
|||
|
||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Так вроде...
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
Pork6 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Да, верно, еще раз спасибо. Ну и последняя (надеюсь) проблема - List в С++.NET
Строчка:
Выдает сразу 3 ошибки на этой строке: Ошибка 1 error C2143: синтаксическая ошибка: отсутствие ";" перед "<" Ошибка 2 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию Ошибка 3 error C2238: непредвиденные лексемы перед ";" В общем, становится ясно, что List он не видит. Сначала была попытка просто изменить List на STL-евский list, с соответствующим include-ом, но эти 3 ошибки никуда не исчезли. Тогда я решил заняться происхождением этого List-а и нашел в MSDN-е, что ему нужно подключить пространство имен using namespace System::Collections::Generic; После подключения оного, я получил 63 ошибки по всему коду программы примерно одного содержания: error C2143: синтаксическая ошибка: отсутствие ";" перед "(" error C2143: синтаксическая ошибка: отсутствие ";" перед "{" ... И прочие прелести, вплоть до неожиданного окончания файла. В гугле ничего про такую ошибку не нашел. P.S. Делаю курсовик, сказали, что бы язык был C++. Для графики предложили MFC, но я выбрал куда более родной по C#-у .NET. Так что постоянно натыкаюсь на такие вот камни. |
|||
|
||||
KelTron |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Возможно класс объявляешь как
а надо
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||
|
|||||
Pork6 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Нет, с Krug-ом все верно. Структура такая:
error C3699: ^: это косвенное обращение невозможно использовать для типа "testCLR::Krug" error C3225: аргумент универсального типа для "T" не может быть "testCLR::Krug *", он должен являться типом значения или дескриптором ссылочного типа (повторяются дважды на строчке с объявлением List-а) Без static-а Си ругается, так что тоже добавил. Это сообщение отредактировал(а) Pork6 - 26.10.2009, 15:50 |
|||
|
||||
KelTron |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Тогда наверно так:
И static не нужно делать, просто код создания списка помести в конструктор.
Глядишь я такими темпами C++.NET выучу, пока с этим примером разбираюсь)) Это сообщение отредактировал(а) KelTron - 26.10.2009, 17:40 -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||
|
|||||
Pork6 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Я тоже надеюсь, что выучу )
Что бы он нормально Krug подцепил, пришлось его в отдельный h-файл, с прописыванием оного в главном файле:
И теперь последний штрих остался - это создание самих кругов. Написал вот так:
И получил ошибки: error C2065: OffsetX: необъявленный идентификатор error C2552: $S6: инициализация не агрегированных данных с помощью списка инициализации не допускается error C2065: OffsetY: необъявленный идентификатор error C2078: слишком много инициализаторов Насколько я понял, ему не нравится синтаксис, а именно - наличие и/или содержимое фигурных скобок. Честно пытался найти справку по использовании класса в Add, но не нашел ничего. По этому поводу есть идеи? В любом случае, спасибо ) |
||||
|
|||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Ну вообще это синтаксический сахар C#. Надо просто на старый лад переделать.
Это сообщение отредактировал(а) KelTron - 26.10.2009, 19:07 -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
Pork6 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Сейчас появилась проблема с классом Krug. Он не видит bounds из Form1 (главной формы).
Сделал, как надо, в Krug.h прописал
и создал экземпляр формы для работы с ней:
Но получаю: error C2065: form: необъявленный идентификатор error C2061: синтаксическая ошибка: идентификатор "Form1" Все это я делаю для функции Draw, которая должна принимать этот bounds из Form1. Многострадальный проект в комплекте. Присоединённый файл ( Кол-во скачиваний: 6 ) ![]() |
||||
|
|||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Копец...такое ощущение, что ты уже наугад код пишешь.
Разве сложно по аналогии с шарпом преобразовать? Я думал может у тебя будет пара вопросов, а так получается на каждой строчке спотыкаешься, видимо проще было сразу на С++.NET написать, хотя я его не знаю. Учись искать информацию. Короче вот, возьми это и сравни с тем примером, что я давал в самом начале. Это должно решить все твои проблемы..) Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
Pork6 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.12.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Получилось, что сложно. Может я ищу информацию как-то не правильно? MSDN, Google, CodeNet...
Еще раз большое спасибо за помощь. Во всем разобрался, буду внедрять. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |