![]() |
|
Модераторы: Rickert |
![]()
|
|
| Qawra |
|
||||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Эту строчку я не могу найти
Судя по всему я её успела отредактировать как
Класс Grids я скомпелировала так
Где-то закралась ошибка потому что окошко выходит без решётки и не по центру экрана . Закрывается нормально но есть Terminal window с текстом
На кнопке старт я изменила вызов конструктора с new Grids("Points", 800, 800, 20, 20).setVisible(true); на new Grids( ); DrawablePoints выглядят теперь так
И остался ещё класс BattleField который нам не нужен но там прописан метод
|
||||||||||||
|
|||||||||||||
| Rpahut |
|
||||||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Эта плоха. Быть она должна.
Вот после этой строчки у вас был там цикл инициализации массива в котором я видел ошибку... Если вы ее уже поправили - тогда ладно.
Одно замечание: canvas.setSize(rows*sellSize , cols*sellSize); можно убрать. Для JPanel размер устанавливается через setPreferredSize(), и делать это нужно в конструкторе GridsCanvas.
Видимо ему не нравится extends класса GridsCanvas. Пока там не будет extends JPanel ошибка так и останется.
Норм. Метод makePoints() нужно перенести из BattleField в GridsCanvas. Класс BattleField можно после этого убрать совсем. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||||||
|
|||||||||||
| Qawra |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Нашла ! Эта строчка была в классе BattleField который мы уже не используем .Там мы инициализировали массив точек в методе makePoints
нужно видимо ввести соординаты x,y как аргументы , либо сделать два разных конструктора DrawablePoint . Один только с цветом а второй только с координатами . class GridsCanvas extends JFrame было ещё вчера .. Сегодня ошибка повторилась . "adding a window to a container" может означать что мы добавляем add(canvas); неправильно с точки зрения компайлера ..? |
||||
|
|||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
extends JPanel. JFrame - это окно, нельзя добавить окно в окно. Конструктор точки пусть остается как есть. Цикл инициализации массива нужно модифицировать - передавать точке вместо координат цвет. Кроме того x и y мы будем передавать точке во время отрисовки. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
C extends JPanel всё получилось замечательно.Сообщение о ошибке изчезло и решётка вышла нормально .
|
|||
|
||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Ну вот, дальше собственно берем цикл
и вставляем его в GridsCanvas в метод paintComponent(). Точки должны рисоваться цветом, который вы передаете им при создании. И не удивляйтесь если точки окажутся неправильно расположены на сетке. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Я изменила цикл инициализации массива
на строчке
Это сообщение отредактировал(а) Qawra - 13.1.2009, 18:34 |
||||||
|
|||||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Qawra,
[
опечатка. должно быть cellSize |
|||
|
||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Угу.
И переменные rowHt и rowWid в методе paintComponent() это тот же cellSize, так что от них можно избавиться.
В остальных местах где эти переменные используются меняем их на cellSize. Кстати, переменные-члены класса у нас везде должны быть private, потому что пользуется ими только сам класс. Да и вообще разумно спрятать переменные класса от остальной программы. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Если отключить
без них ничего нарисовать в данный момент нельзя.
|
||||
|
|||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
и дальше в том же духе --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
скомпелировалось так
|
||||||
|
|||||||
| Rpahut |
|
||||||||||||||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Вот этого я не ожидал
А почему именно их? Давайте разберемся: Лини рисуются при помощи drawLine() + Линии рисуются неправильно = Неправильно используется метод drawLine() drawLine() принимает четыре аргумента: drawLine(x1, y1, x2, y2) x1 и y1 это координаты начала линии, x2 и y2 - координаты ее конца. Нам, чтобы начертить сетку, нужно нарисовать вертикальные и горизонтальные линии на поле
У горизонтальных линий y1 и y2 должны быть одинаковые, иначе они не будут горизонтальными. Вообще любая точка на горизонтальной прямой имеет ту же координату Y. У вертикальных линий должны быть одинаковые x1 и x2. Дальше - первую горизонтальную линию нам надо начертить в самом верху поля, все остальные - ниже предыдущей на cellSize. Т.е. координата Y кратна cellSize и равна cellSize*номерСтроки; у нас в цикле уже есть переменная i которая считает строки и содержит номер текущей строки. Записываем:
Теперь x1 и x2. Каждая линия должна идти от одного края поля до другого, для этого один икс должен быть равен нулю(у левого края поля x=0), а другой равен ширине поля (т.е. cols*cellSize); вписываем иксы:
Аналогично для вертикальных линий: X начала и конца каждой линии одинаковый. X кратен cellSize и равен cellSize*номерСтолбца (вместо номера столбца опять используем переменную i). Y начала линии - ноль. Y конца линии - расстояние от верха до низа поля = высота поля = количествоСтрок*cellSize ===========================
В этой строке:
такое исключение может возникнуть, только если points[x][y] не содержит точки. Скорее всего что-то случилось с циклом инициализации массива points. Вообще с этим массивом мы много чего делаем, напомню самые важные моменты:
Когда мы создаем массив, в его ячейки раскладывается значение null. Если не инициализировать массив, null так там и останется. Если после этого попытаться что-то сделать с элементом в массиве, например
возникает NullPointerException. Когда инициализация у вас будет работать как надо, на экране сразу появятся точки. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||||||||||||||
|
|||||||||||||||||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Зашла в интернет утром перед школой и убегаю ..В школе попробую переделать . У меня часовой пояс на два часа раньше чем московкий .Поэтому я иногда не успеваю
|
|||
|
||||
| Qawra |
|
||||||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Решётка теперь рисуется нормально.
Цикл инициализации массива points ... Мне кажется чего - то нехватает в классе DrawablePoint .. Но начнём по порядку : В классе GridsCanvas если мы инициализируем как член класса
Если мы передадим цвет при создании точек (не знаю правда какой реально это цвет с точки зрения компайлера ..наверно firstPlayerColor..) то сообщение об ошибке изчезает
Осталась нарисовать точки...Для этого нам нужны аргументы. В классе DrawablePoint у нас прописано почему- то даже два метода
когда я пытаюсь нарисовать точки как
|
||||||||||||||
|
|||||||||||||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |