Nape — создаём персонажа
Всё написанное имеет отношение к milestone 5 и выше. Это может не работать на ранних версиях nape.
Это моё любимое. Вы наверное часто такое видели в играх.
К примеру в одной игре персонаж легко взбирается по ступенькам.
В другой же игре приходится нажимать кнопку прыжка чтоб он сделал это.
Есть довольно хорошая схема реализации, она неплохо себя зарекомендовала:
Круг используется в качестве ног! Если есть столкновение с ногами — значит под ногами есть земля и мы можем подпрыгнуть, также мы можем вскарабкиваться по невысоким «ступенькам» как я и говорил выше.
Всё остальное делает движок — гравитация давит, тела падают.
Правильная схема расположения круга в центре.
Давайте рассмотрим неправильные:
- Итак схема слева:
Слишком большой круг и плохо утоплен в тело прямоугольника. Если наш герой «зажат» то можно будет сделать супер прыжок тк ноги будут зажаты, а это значит что прыжок доступен. - Схема справа:
Круг маленький, герой может просто застрять на ступеньке!
Приступим к созданию:
Итак вы поняли что тело состоит из нескольких фигур, а всё остальное делает движок.
Я должен вам напомнить что тело героя будет вращаться и ваша задача — либо сделать ограничение вращения, либо запретить вращаться.
В примере ниже я полностью запрещаю вращение.
public var feet:nape.shape.Shape; public var Pbody:Body=new Body(BodyType.DYNAMIC); //пишу кратко feet = new Circle(5,new Vec2(0,10),new Material(0, 9, 9, 1.5, 1)); //наши ноги var poly=new Polygon(Polygon.rect(x, y,width,height),new Material(0, 0, 0, 1.5, 0));//наше туловище Pbody.position.setxy(x,y); Pbody.allowRotation = false; // запретил вращение как и обещал Pbody.shapes.add(poly); Pbody.shapes.add(feet); Pbody.space=Main.space; // ниже идёт контроль игрока в безвоздушном пространстве aircon = new LineJoint(Main.space.world,Pbody,new Vec2(), new Vec2(), new Vec2(0,1), Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY); aircon.stiff = false; aircon.maxError = 0.0; aircon.space = Main.space; public function вызываем_на_энтерфрейме() { Pbody.kinematicVel.setxy(0,0); midair = true; for(var i = 0; i<Pbody.arbiters.length; i++) { var arb:Arbiter = Pbody.arbiters.at(i); if(arb.isCollisionArbiter() && (arb.shape1==feet || arb.shape2==feet)) midair = false; } aircon.active = midair; }
Итак в первую очередь. Контроль игрока в воздухе нужен для того чтобы контролировать тело в воздухе.
if(arb.isCollisionArbiter() && (arb.shape1==feet || arb.shape2==feet)) midair = false;
Это строка расшифровывается как: если есть столкновения с ногами значит персонаж не в воздухе.
Дальше идёт управление клавишами. Я расписывать не буду. Тут много способов. Например на Pbody можно воздействовать импульсом. У себя я делал через kinematicVel. Всё очень просто.
нужен совет.
тут знакомый спрашивает, какую лучше чистилку купить для зеркалки никон. у его друга, любительского фотографа днюха, вот он хочет подарить ему подарить ленспен. http://lipetsk.dns-shop.ru/catalog/24/108401/
я помню ты писал, что это устройство уг. стоит ли покупать или лучше подарить что-нибудь другое?
Кисточку беличью в канцелярском магазине.
Можно маленкую клизму в аптеке или грушу (сдувать пыль).
А если помыть надо тогда изопропиловый спирт — в аптеке + какие нибудь безворсовые салфетки.
По поводу взбирания по лестнице прыжками — согласен, тупизм и бесит. Интересное решение, о таком не догадывался.
😀 вот это он обрадуется миниатюрной клизме. ещё и с высеченным именем на её боку