2014-12-02 2 views
0

, поэтому я делаю игру в стиле платформера и пытаюсь сделать тест с линией, если это имеет смысл. Прямо сейчас у меня есть объект, который перемещается и всякий раз, когда вы двигаетесь вправо, если нижняя правая или верхняя правая сторона попадает в мир, вы перестаете двигаться. такой же предмет установлен с левым. Это работает, однако, если «мировой» мувиклип слишком мал и не попадает ни в один из пунктов, которые вы можете пройти прямо через него. Итак, мне нужно сделать сплошную линию между точками и иметь hitTest с этим?Хит-тест с линией

else if (keyIsDown(Keyboard.RIGHT)) 
     { 
      //dude.gotoAndStop("right"); 
      //obj.scaleX = 1; 
      for (i = 0; i<speedX; i++) 
      { 
       obj.x++; 
       dude.ball.rotation++; 
       if (status == "ground") 
       { 
        dude.height+= 0.05; 
        dude.width += 0.05; 

       } 
        if (world.hitTestPoint(obj.x + obj.width/8 - obj.width/2, obj.y - obj.height/4,true) || world.hitTestPoint(obj.x + obj.width/2,obj.y - obj.height + obj.height/4,true)) 
//this is what dictates the points that hit, trying to make it test a hit with a solid line between the 2 points. 
        //if (world.hitTestObject(dude.hitD)) 
        { 

         dude.ball.rotation--; 


    obj.x--; 
        break; 
       } 
      } 
     } 
     dude.gotoAndStop(1); 

    } 

строки кода я попытался добавить

else if (keyIsDown(Keyboard.RIGHT)) 
     { 
      //dude.gotoAndStop("right"); 
      //obj.scaleX = 1; 
      for (i = 0; i<speedX; i++) 
      { 
       obj.x++; 
       dude.ball.rotation++; 
       myShape.graphics.moveTo(obj.x + obj.width/8 - obj.width/2,obj.y - obj.height/4); 
       myShape.graphics.lineTo(obj.x + obj.width/2, obj.y - obj.height + obj.height/4); 
       // The number in obj.y-4 affects the climbing ability 
       if (status == "ground") 
       { 
        //dude.height+= 0.05; 
        //dude.width += 0.05; 
       } 


       if (obj.hitTestObject(myShape)) 
       { 
        dude.ball.rotation--; 
        obj.x--; 
        break; 
       } 
      } 
     } 
     dude.gotoAndStop(1); 

    } 
+0

так почему бы не сделать эту сплошную линию и дать ей «solid_line.alpha = 0;» теперь ее невидимым для глаза, но компьютер может обнаружить «удар» против него? Ваш вопрос непонятен. Вы не знаете, как сделать линию или что? –

+0

@ VC.One Уже пробовал это, добавляя эту форму линии, может быть, я не делаю это правильно? См. Edit – Trows

ответ

1

Насколько я понимаю, вы пытаетесь сделать платформер игра, где игрок управляет мячом. Итак, вам нужно обнаружить круговое столкновение, по крайней мере, для перехода вправо и влево.

При реализации любой программы, особенно на тех частях, которые будут выполняться так часто, как обнаружение конфликтов, вы всегда должны искать ярлыки.

Я могу предложить пару подходов;

  1. Ярлык для этого случая может иметь невидимую форму коробки, немного меньшую, чем ваш шар, и делать с ней обнаружение столкновения. Несомненно, это уменьшит визуальное качество; например когда вы приближаетесь к нижнему краю, который может поместиться слева внизу вашего объекта, ваш объект будет разбиваться рано, без визуального касания блока.

  2. Или вы просто игнорируете производительность и увеличиваете количество точек вокруг круга. Даже вы можете написать алгоритм поиска позиций на внешнем краю вашего круга с определенным интервалом и проверить, не сталкивается ли кто-либо из них. Таким образом, обнаружение столкновения не может пропустить небольшие объекты.

  3. Однако есть лучший подход. Вы можете реализовать двухуровневое обнаружение конфликтов. Первое, что у вас есть сейчас, а во-вторых, это невидимый ящик с одинаковой высотой вашего шара и меньший по ширине, чтобы его края отставали от ваших основных точек обнаружения. Таким образом, вторичное обнаружение ничего не пропустит, но оно будет работать только тогда, когда первичное обнаружение не сможет поймать что-либо между или ниже.

+0

Спасибо, но я пробовал это много раз. Не могли бы вы пройти меня через шаги по созданию мувиклипа внутри мувиклипа для метода невидимого ящика? Вот как я понимаю это: дважды щелкните мышью на мувиклипе, нарисуйте квадрат возле центра и преобразуйте его в символ. предоставить имя экземпляра символа и проверить для HitTestObject этот экземпляр. – Trows

+0

Да, это правильно. Создайте MovieClip внутри вашего персонажа, сформируйте его так, как вы хотите (помните, что ограничивающая рамка объекта будет восприниматься как сплошная с hitTestObject()) и использовать ее для вашей функции обнаружения. Например: world.hitTestObject (player.hitBox). Если все остальное не удастся, вы можете связаться со мной по электронной почте в моем профиле. –

Смежные вопросы