Масштабирование в цикле while
Здравствуйте, я очень новичок в программировании. мой курс для начинающих в колледже использует Java-скрипт в обработке 3. для моего проекта мне нужно сделать так, чтобы мой аватар масштабировался до другого размера каждый раз, когда он проходит по экрану. масштабирование с использованием цикла while - это то, с чем у меня возникли проблемы. мы должны поместить аватар в вызов функции. я опубликую тот код, который у меня есть ниже. мне нужна помощь как можно скорее! Спасибо!
int Mart_start_x = -100; //x axis start location int Mart_start_y = 570; //y axis start location int Mart_speed = 4; //speed which Mart moves int r_Leg_x = 50; //'foot' location of right leg int r_Leg_speed = 1; //speed of which right leg moves int l_Leg_x = -50; //'foot' location of left leg int l_Leg_speed = -1; //speed of which left leg moves int Mart_count = 0; //How many Marts there are float scale_size = .5; //scaling Mart void setup() { size(1500,750); } void draw() { background (255); fill(150); MartFunction(Mart_start_x, 570, 1); //while { scale_size = scale_size + .5; } scale_size = 0; Mart_start_x= Mart_start_x + Mart_speed; if(Mart_start_x > width+100) { Mart_start_x = -100; //This moves Mart across screen } r_Leg_x = r_Leg_x + r_Leg_speed; //this wiggles right leg START if((r_Leg_x > 65) || (r_Leg_x < 35)) { r_Leg_speed = r_Leg_speed * -1; //this wiggles right leg END } l_Leg_x = l_Leg_x + l_Leg_speed; //this wiggles left leg START if((l_Leg_x > -35) || (l_Leg_x < -65)) { l_Leg_speed = l_Leg_speed * -1; //this wiggles left leg END } } /*************************************************************************/ /* Function name: MartFunction */ /* Description: Draw Mart when the function is called */ /* Parameters: int x_loc, int y_loc, float scale_size */ /* Return Value: */ /*************************************************************************/ void MartFunction(int x_loc, int y_loc, float scale_size) { pushMatrix(); translate(x_loc,y_loc); //Mart's location scale(scale_size); stroke(5); line(0,-50,r_Leg_x,125); //right leg stroke(5); line(0,-50,l_Leg_x,125); //left leg noStroke(); fill(#084B0F); ellipse(0,0,75,175); //body noStroke(); fill(#2C8E11); ellipse(0,-100,200,100); //head noStroke(); fill(#EBFF17); ellipse(-50,-100,25,50); //left eye noStroke(); fill(#EBFF17); ellipse(0,-100,25,65); //middle eye noStroke(); fill(#EBFF17); ellipse(50,-100,25,50); //right eye popMatrix(); }
Что я уже пробовал:
мой профессор не отвечал по электронной почте с тех пор, как мое первое письмо было отправлено больше недели назад с просьбой о помощи. никто больше не знает, что делать.
phil.o
Что не так с этим кодом? Пожалуйста, не говорите "это не работает", а лучше объясните точно, в каком смысле это неверно.
Мы более чем рады помочь, но нам нужно, чтобы вы точно указали, где вы застряли.
DragonNinjaBD
на данный момент это действительно работает. я просто не знаю, как заставить цикл while масштабировать мой аватар каждый раз, когда он проходит по экрану
DragonNinjaBD
я также прокомментировал "while", чтобы проверить остальную часть кода, чтобы убедиться, что он работает
CPallini
Это не похоже на Javascript.
DragonNinjaBD
вот что сказал нам мой профессор если только я не ошибаюсь
CPallini
Насколько я знаю, JS не имеет статических типизированных переменных (например, 'int').
DragonNinjaBD
ну ладно, тогда я поменяю тег на просто java, спасибо
Richard MacCutchan
Ты звонишь MartFunction
с scale_size равным 1, поэтому он никогда не меняет размеры. Но даже если вы измените scale_size, будет слишком поздно, так как вы уже нарисовали изображение на 100%.
DragonNinjaBD
на что же мне тогда его менять?
Richard MacCutchan
Если вы хотите изменить размер изображения, то вам нужно каждый раз передавать фактическое значение масштабирования в MartFunction. Но неясно, что вы на самом деле пытаетесь сделать.
DragonNinjaBD
я заставляю его двигаться от экрана слева к экрану справа. как только он выходит с правой стороны, он сбрасывается на экран слева. я хочу, чтобы он менял свой размер шкалы каждый раз, когда он проходит через нее, то есть один раз он будет крошечного размера, в следующий раз другого размера и т. д.
Richard MacCutchan
Ладно, теперь все просто. Всякий раз, когда вы сбрасываете начальную позицию слева от экрана, установите новый scale_size. Таким образом, изображение будет иметь тот же размер, что и при пересечении экрана, но другой размер при следующем запуске. Просто попробуйте переключиться между 0.5 и 1.0 для начала, чтобы вы могли проверить базовую логику.
DragonNinjaBD
могу ли я сделать это с помощью цикла while? потому что цикл-это требование
Richard MacCutchan
Да, но это будет вне существующего кода, что-то вроде:
Set scale_size to 1.0 set count of number of loops while (count > 0) { set left position while (left position < right position) { draw image at left position add step to left position } subtract 1 from count set scale_size to other value }
DragonNinjaBD
мне нужно будет поставить его до или после кода для перемещения его? который:
Mart_start_x= Mart_start_x + Mart_speed;
if(Mart_start_x > width+100)
{
Mart_start_x = -100;
Richard MacCutchan
Внешний цикл while существует для того, чтобы повторить полное перемещение изображения некоторое количество раз и изменить масштабный коэффициент. Внутренняя петля while-это место, где изображение перемещается по экрану. Таким образом, внутри вы должны нарисовать изображение в каждом месте, используя масштабный коэффициент, установленный в главном цикле.
DragonNinjaBD
мне очень жаль, что я изучаю визуальную/кинестетическую технику, поэтому, пока я ее не увижу, мне будет трудно понять. спасибо Вам за всю вашу помощь, но, к сожалению, я просто не понимаю ):
Richard MacCutchan
Извините, но я не могу сделать это намного яснее. Я бы просто сказал, что одним из навыков, которые вам нужно развить, является способность понимать псевдокод, который я вам дал. Медленно прочтите каждую строку и подумайте о том, как вы соотносите ее с реальным кодом, который пытаетесь разработать.
DragonNinjaBD
большое вам спасибо за вашу помощь, это очень много значит
DragonNinjaBD
как и пример кода, который вы набрали ^ помог, но так как я не могу видеть его в остальной части кода, он просто не щелкает для меня ):