Вопрос
- Войдите на сайт для отправки комментариев
Чт, 08/05/2014 - 20:14
boolean [] button1; boolean [] button2; int i, n,u,k,j,h,ww,w; float distTotal; PFont verdana; void setup() { size(700,500); button1 = new boolean[1]; button2 = new boolean[1]; } void draw() { fill(0); text(int(distTotal),140,65); if(button1[i]) { if (mousePressed==true) { fill(255, 0, 0); rect(mouseX, mouseY, 5, 5); point(pmouseX, pmouseY); strokeWeight(1); if (w>0&&ww>0&&!keyPressed) { line(w, ww, mouseX, mouseY ); distTotal = distTotal + (dist( w, ww, mouseX, mouseY )/50); } println(distTotal); w=mouseX; ww=mouseY; } fill(0,255,0); } else { fill(255,255,0); } strokeWeight(3); ellipse(100,100,45,45); if(button2[u]) { float sum; int otv=0; sum=distTotal/6; println(sum); println(otv); if ( sum > otv) { for(otv=0;otv < sum;otv ++) { if(mousePressed==true) { ellipse(mouseX,mouseY,20,20); } } } } else { fill(255,255,0); } strokeWeight(3); ellipse(200,200,45,45); } void mouseClicked(){ if(dist(100,100,mouseX, mouseY)<=25){ button1[n] = !button1[n]; button2[n] = false; } if(dist(200,200,mouseX, mouseY)<=25){ button2[n] = !button2[n]; button1[n] = false; } }
В общем написал программку, это её часть, суть в том что я нарисовал линии (в перспективе план комнаты) и расчитав длинну стен получаю площадь, поделив площадь на 6 ( столько квадратов примерно нужно нужно на 1 ПК) я получаю число (условно 10) дальше я рисую кружки ( условно пк) и сделал ограничение что if ( sum > otv) где otv=0 и с каждым поставленным пк значение otv должно увеличиваться на 1, но такового не происходит ((( Может кто-то знает в чем проблема?
Вы используете переменные i n u в качестве индекса массивов но нигде не присваиваете им значения. Это так задумано?
Значение переменных не играет тут никакой роли, суть проблемы кроется тут >>>
Тут цикл for не выполняет свою задачу тоесть не прибавляет значение +1 к переменной otv
А до него управление доходит?
println(sum);
07
println(otv);
что выводит?
println(sum); показывает длинну нарисованной линии
println(otv); значение переменной которое я ей присвоил то есть 0
Думаю что в цикл for входит т.к. под циклом действие ellipse(mouseX,mouseY,20,20); то есть рисование кругов по координатам с мышки , я пологаю что изменение переменной otv не происходит из-за того что ellipse(mouseX,mouseY,20,20); не считает его за действие то есть один раз я в него зашел и не выходя из цикла рисую до посинения, думаю если бы я смог выйти с цикла то переменной otv точно бы присвоилось значение +1
> значение otv должно увеличиваться на 1, но такового не происходит
А с чего вы взяли что оно "не увеличивается"? Как, по вашему, вы должны увидеть это увеличение? Если вы просто пробегаете otv от 0 до sum-1, нигде это otv не используя? Ни на рисование кружочков оно не вляется, ни println ему не деалется.
Вернее на количество кружочков оно вляется, но так как кружочки рисуются по одним и тем же координатам, то различить их невозможно. Все кружки кружки рисуются в одном месте. там где сейчас мышка. накладываясь один на другой.
И проверка
абсолютно линяя. Она просто дублирует условия выхода из цикла
Это не считая того, что она в любом случае ВСЕГДА будет проходит. Если у вас нет комнат с нулевой или отрицательной площадью. sum, по хорошему, всегда положительное число. otv - всегда ноль. логично положительное число всегда больше нуля. и if(sum>otv) - всегда даст true.
намек: есть сильное подозрение (не уверенность, потому как не совсем ясно что вы хотите сделать), что
1. otv вам нужно сделать глобальным, и увеличивать его на нажатие мышки)
2. А вот всякие i - как раз наоборот (вообще нужно сразу бить по рукам за объявление i глобальной).
3. otv у вас должно быть не индексом цикла, а как раз "условием выхода из него). for(int i=0;i<otv;i++)
4. использовать i в функции ellipse, делать с помощью нее какое-то смещение. что-бы кружки не накладывались.
А еще... нужно научится темы называть как-то более информативно. Можно подумать, это первая тема за полгода которая содержит вопрос. А все остальные темы на форуме - дык сплошные ответы. сразу. без вопросов.
Ну а как мне тогда поставить ограничитель на количество кружков?
1. otv вам нужно сделать глобальным, и увеличивать его на нажатие мышки)- ВОТ ТУТ Я НЕ ПОНЯЛ ЭТО КАК? можешь пример привести ?
1. otv вам нужно сделать глобальным, и увеличивать его на нажатие мышки)- ВОТ ТУТ Я НЕ ПОНЯЛ ЭТО КАК? можешь пример привести ?
Нужно не пример. Он у вас перед глазами, в вашем же скетче. Там есть и глобальные перменные и локальные. Вам нужно открыть любой учебник по программирования. И разобратся с тем какие бывают переменные. Разделы "обласить видимости переменных", "объявление переменных" и т.п. Что-бы слова "глобальная"/"локальная" несли семантический смысл для вас. Что бы вы понимали в чем их отличие с точки зрения компилятора. Чем отличается их поведение. А не "объявлять наобум где и как прийдется".
И отложить временно в сторону кружочки, площади и т.п. Научится просто по нажатию кнопки, увеличивать какую-то переменную. Просто выводя ее через println
Может быть проблема того , что " for не выполняет свою задачу тоесть не прибавляет значение +1 к переменной otv" в пробеле между otv и ++ ?
читаем http://arduino.ru/Reference/Increment
не имею возможности проверить, но странно, как компиллятор это пропускает.
и еще, в названии топика желательно хоть как то отражать его содержание. Тут практически все топики - вопросы к сообществу.
Вот чуть подправил теперь otv считает, но считает сразу как только я нажал активировал функцию "Рисовать кружки" он сразу посчитал допустим (sum =60 ) otv =10; он считает сразу а не после каждого создания кружка
А для чего Вы поставили плюсики перед переменной ?
>Вот чуть подправил теперь otv считает
Как я писал вам выше, он у вас и раньше считал. Только вы этого не видели. Так как небыло println внутри цикла.
Переделывать otv++, на ++otv - было не обязательно. В циклах, все-таки традиционней otv++ использовать. Тогда вносить "поправку на ветер" в виде sum-1 не пришлось-бы.
А вообще, IMHO, вы сейчас просто не понимание когда вызывается draw(), СКОЛЬКО РАЗ, что происходит между его вызовыми.
Вы сейчас пытаетесь угадать/подобрать ответ.
Еще раз советую. Забудте про кружочки. Сохраните свой скетч, сделайте File/New и напишите новый. Который делает такое:
1. На каждый клик мышки увеличивает какую-то переменную на единицу. Пусть она называется clickCnt;
2. Выводит эту переменную с помощью println
Все. Больше ничего.
Пока вы этого не сделаете, как бы вы не мучали свои циклы, как бы не ограничивали otv, как бы не вводили "поправки на ветер" решить задачу "нарисовать столько кружочков сколько раз кликнули мышкой" - вы не сможете.
Если не известно "сколько кружочков нужно", то как можно нарисовать их правильное количество?
А для чего Вы поставили плюсики перед переменной ?
Скорее всего "просто где-то увидел что бывают плюсики перед переменной". А в чем разница между плюсиками перед и после - пока не известно.