DragonNinjaBD Ответов: 1

Масштабирование в цикле 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

как и пример кода, который вы набрали ^ помог, но так как я не могу видеть его в остальной части кода, он просто не щелкает для меня ):

1 Ответов

Рейтинг:
1

phil.o

Во-первых, вы не должны давать одно и то же имя полю-члену и параметру метода (я говорю о scale_sizeВы даже можете полностью избавиться от этого параметра и использовать вместо него поле member.

Во - вторых, вы сбрасываете scale_size значение до нуля каждый раз, когда draw() метод называется. Попробуйте прокомментировать эту строку и посмотреть, куда она вас приведет.

В качестве побочного вопроса, есть ли у вас какой-либо отладчик с IDE, которую вы используете?


DragonNinjaBD

что такое "поле участника"? к сожалению я применил шаблон основной на кодирование

phil.o

Поле-член-это переменная, объявленная внутри класса. Здесь я имею в виду следующее: scale_size переменная, которую вы определяете в строке float scale_size = .5; //scaling Mart.

DragonNinjaBD

я избавился от float 'scale_size = .5; //scaling Mart.' но мне все еще нужен цикл, чтобы дать ему масштаб каждый раз, когда он проходит через него, и, возможно, мне нужно сбросить его в какой-то момент, я не знаю

кроме того, что касается вашего первоначального побочного вопроса, я понятия не имею, что означает IDE.

phil.o

Я думал об обратном: сохранить переменную-член и удалить параметр из функции.
IDE-это интегрированная среда разработки, например Eclipse для java.