Форум » Вопрос-Ответ » [GMaker] Толкание ящиков в TDS » Ответить

[GMaker] Толкание ящиков в TDS

Spyro23: Нужен код толкания ящиков в TDS. Тоесть, игрок движет ящик, когда к нему прикасается при нажатой клавише движения. Понятно? Герой двигается вверх и вниз, на влево_вправо вращается камера. Вверх: motion_add(obj_camera.direction+180,2) Вниз: motion_add(obj_camera.direction-180,2) Если упрощённо, то объект движется вверх-вниз с помощью стрелок через motion_add.

Ответов - 41, стр: 1 2 All

zuko: Что такое тдс? давно когда еще на ГФ сидел я делал толкание просто дирекция ящика = дирекции игрока давал скорость выставлял трение и все, получается отталкиваение(а не толкание) но этот способ я придумал еще в 13 лет=)

CodeMaster: Spyro23 пишет: Понятно? Spy реально так жестко, .......ну что поняли щучьи скоты

Spyro23: zuko пишет: Что такое тдс? Top-Down Shooter. zuko пишет: давно когда еще на ГФ сидел я делал толкание просто дирекция ящика = дирекции игрока давал скорость выставлял трение и все, получается отталкиваение(а не толкание) но этот способ я придумал еще в 13 лет=) Я тоже так делал. Сейчас попробую так на GM. UPD: Не выходит(((


sanchez: ммм, можно еще сделать так, проверять с какой стороны находиться игрок, и прои столкновении двигаться в обратную сторону, мож пример сделаю

Spyro23: Сделай, плз!

zuko: Создавай обьект и ящик Ящик событие [collision] с обьектом код x+=other.x-other.xprevious y+=other.y-other.yprevious а в обьекте игрока перемешение какое хочешь в чем собственно и плюс данного кода.

Spyro23: Плз, напиши пример с моим движением, а то что-то не работает.

zuko: а какое у тебя движение

Spyro23: См. первый пост.

zuko: код напиши..а то я не очень понимаю

Spyro23: Keyboard Event for <Up> Key: execute code: motion_add(90,2) Keyboard Event for <Down> Key: execute code: motion_add(-90,2)

zuko: И с твоим движением тоже работает. http://slil.ru/27864968 ну там еще 2 типа движения если че раскомментируешь что нужно.

Spyro23: zuko, вот на этот раз помогло! Спасибо огромное!

zuko: Да ладно это было не сложно=)) С прицепом я побольше мучался.

Spyro23: Ещё один вопрос: что не так? Постоянно проигрывается спрайт SLOSE: Information about object: Sharaven Sprite: sidle Solid: true Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> Create Event: execute code: z=0 dest=0 hp=3 timeline_speed=0.5 sprite_index=sidle set time line timeline4 at position 0 Destroy Event: create instance of object wrp at position (Sharaven.x,Sharaven.y) Step Event: execute code: if hp=0 timeline_speed=0 sprite_index=slose Collision Event with object obj_block: execute code: z=32 Collision Event with object crate: execute code: if hp>0 hp-=1 sprite_index=shurt timeline_position=0 for all crate: destroy the instance for all sharab: destroy the instance for all object64: destroy the instance Other Event: Animation End: execute code: if hp>0 sptite_index=sidle if hp=0 and sprite_index=slose instance_destroy() Draw Event: execute code: if (point_distance(x,y,obj_player.x,obj_player.y)>global.look) exit; else { draw_set_color(c_white); d3d_transform_set_identity(); d3d_transform_add_rotation_x(90); d3d_transform_add_rotation_z(point_direction(x,y,obj_camera.x,obj_camera.y)+90); d3d_transform_add_translation(x,y,z) draw_sprite_ext(sprite_index,image_single,0,0,0.5,0.5,0,c_white,1); d3d_transform_set_identity(); //draw shadow d3d_transform_set_identity() d3d_transform_add_rotation_z(0) d3d_transform_add_translation(x,y,shadow_z+1) draw_set_alpha(0.5) draw_set_color(c_black) draw_sprite_ext(sprite_index,image_single,0,0,0.5,0.5,0,c_black,1); draw_set_color(c_white) draw_set_alpha(1) d3d_transform_set_identity() }

zuko: Spyro23 пишет: Step Event: execute code: if hp=0 timeline_speed=0 sprite_index=slose if hp=0 { timeline_speed=0 sprite_index=slose }

Spyro23: zuko, спс. А вот недавно выскочил ещё один вопрос: сделал в игре хелзбар с помощью орто проекции, но перестали рисоваться примитивы (кроме полов и стен) и объекты, создающиеся в процессе игры. Как быть? У КодМастера в Сонике так хелзбар рисовался. Делаю хбар через отдельный объект obj_bar. Вот код рисования: { d3d_set_projection_ortho(0,0,640,480,0); draw_sprite_ext(ttt,-1,65,50,1,1,0,c_white,1) draw_healthbar(48,54,110,48,health,c_black,c_yellow,c_green,0,true,true); } То есть делаю по принципу рисования хбара в примере 3D Дума. UPD: Уже разобрался. Объекту хелзбара надо устанавливать САМУЮ МАЛЕНЬКУЮ (-999999...) ГЛУБИНУ В ИГРЕ!

Spyro23: И ещё один вопрос: я хочу, чтобы пол переворачивался вокруг своей оси, а он ещё и совершает переворот вокруг точки 0,0,0. Что не так? d3d_transform_set_identity() d3d_transform_add_rotation_z(zrotate) d3d_transform_add_rotation_y(yrotate) d3d_transform_add_translation(x,y,z+16) d3d_draw_floor(x,y,-1,x+32,y+32,-1,sprite_get_texture(spr_grass,-1),1,1) d3d_transform_set_identity()

zuko: В 3д я не селён т.к не использывал серьезно. Спроси кого нибудь поопытнее, Кодмастера или Кто-то

Spyro23: Очередное "Что не так?". Переменная hp больше двух не уменьшается: Information about object: o0 Sprite: nidle Solid: false Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> Create Event: set the absolute path to path0 with speed 1 and at the end continue from here set time line timeline0 at position 0 execute code: hp=3 z=0 Step Event: execute code: if hp=2 timeline_index=timeline9 if hp=1 timeline_index=timeline10 if hp=0 { timeline_speed=0 sprite_index=nlose } if sprite_index=nhurt { timeline_speed=0 } else timeline_speed=1 Collision Event with object floor: execute code: if floor.zrotate=10 and hp=3 { sprite_index=nhurt } hp-=1 if floor.zrotate=10 and hp=2 { sprite_index=nhurt } hp-=1 if floor.zrotate=10 and hp=1 { sprite_index=nhurt } hp-=1 for all blue: execute code: if floor.zrotate=10 and o0.hp>0 { sprite_index=lhurt } Collision Event with object blue: execute code: path_position=path_positionprevious Other Event: Animation End: execute code: if hp>0 sprite_index=nidle if hp=0 and sprite_index=nlose { timeline_speed=0 path_speed=0 instance_destroy() instance_create(512,1312,wrp) instance_create(512,1344,Life) } Draw Event: execute code: if (point_distance(x,y,obj_player.x,obj_player.y)>global.look) exit; else { draw_set_color(c_white); d3d_transform_set_identity(); d3d_transform_add_rotation_x(90); d3d_transform_add_rotation_z(point_direction(x,y,obj_camera.x,obj_camera.y)+90); d3d_transform_add_translation(x,y,z) draw_sprite_ext(sprite_index,image_single,0,0,0.5,0.5,0,c_white,1); d3d_transform_set_identity(); //draw shadow d3d_transform_set_identity() d3d_transform_add_rotation_z(0) d3d_transform_add_translation(x,y,shadow_z+1) draw_set_alpha(0.5) draw_set_color(c_black) draw_sprite_ext(sprite_index,image_single,0,0,0.5,0.5,0,c_black,1); draw_set_color(c_white) draw_set_alpha(1) d3d_transform_set_identity() }

zuko: Ты что когда игру делаешь не проверяешь каждый кусок кода?

Spyro23: Почему? Проверяю.

Likantrop: кстати: Spyro23 пишет: if floor.zrotate=10 and hp=3 { sprite_index=nhurt } hp-=1 if floor.zrotate=10 and hp=2 { sprite_index=nhurt } hp-=1 if floor.zrotate=10 and hp=1 { sprite_index=nhurt } hp-=1 нафига три раза одно и тоже писать?

Spyro23: Я думал так решить эту проблему. Иначе написал бы: if floor.zrotate=10 and hp>0 { sprite_index=nhurt } hp-=1

Likantrop: а..ясно...говоришь, хп меньше 2 не становится? ща код еще раз посмотрю но по своему опыту могу сказать, что таинственные вещи происходят по невнимательности...

ккким: у тебя переменная ХП не уменьшается или мгновенно уменьшается до нуля?

ккким: а ты попробуй написать if floor.zrotate=10 { if hp>0 { sprite_index=nhurt hp-=1 } проверь обязательно: я сделал последовательную проверку зротейт и эйчпи больше нуля и у тебя действие hp-=1 стоит за фигурными скобками то есть в обязательном порядке и если этот код в событии степ то в самом начале игры она будет бесконечно уменьшаться

Spyro23: ккким, я ставил этот код в столкновение с полом - не работает, один раз ударяешь и hp становиться равной 0, в степ - она опять дальше двух не уменьшается.

ккким: это код падения с высоты???

Spyro23: Нет. Это код для поражения босса.

ккким: а причем тут пол?

Flooty: сделай тогда так: if (floor.zrotate == 10 && hp > 0 && !onFloor) { sprite_index = nhurt; hp -= 1; onFloor = true; } else { onFloor = false; }

ккким: попробовал?

Spyro23: Попробовал. Код Флу вроде помогает, но уменьшает не всегда. Но эту проблему я решу сам.

ккким: ну . флу конечно ГМЛ лудще знает чем я...

Flooty: ккким пишет: ну . флу конечно ГМЛ лудще знает чем я.. да я его вообще не знаю

Gesta: Spyro23 пишет: И ещё один вопрос: я хочу, чтобы пол переворачивался вокруг своей оси, а он ещё и совершает переворот вокруг точки 0,0,0. Что не так? d3d_transform_set_identity() d3d_transform_add_rotation_z(zrotate) d3d_transform_add_rotation_y(yrotate) d3d_transform_add_translation(x,y,z+16) d3d_draw_floor(-16,-16,-1,+16,+16,-1,sprite_get_texture(spr_grass,-1),1,1) d3d_transform_set_identity()

Spyro23: Gesta, этот вопрос я уже давно решил.

ккким: красавчегг

Spyro23: Запрос на пример: подкиньте кто-нибудь, плз, пример диалогов и паузы в 3D, весь ёё и миззистик перекопал - нету. SOLVED.



полная версия страницы