Воскресенье, 22 Декабря 2024, 11:50

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
столкновение с использованием ds_grid
all500234765Дата: Четверг, 26 Февраля 2015, 19:54 | Сообщение # 1
был не раз
Сейчас нет на сайте
не давно начал частично свой проект с начала, решил заменить объектные блоки на ds_grid.
почти все работает хорошо мир генерируется но игроку я прописал вот этот код:
Код
if ds_grid_get(gd,x,y+1)==-1{
      vsp=8
}else if ds_grid_get(gd,x,y+1)==-1{
      vsp=0
}

но он не хочет сталкиваться с ds_grid'ом а просто падает вниз
помогите!


Сообщение отредактировал all500234765 - Четверг, 26 Февраля 2015, 19:55
YellowAfterlifeДата: Четверг, 26 Февраля 2015, 20:15 | Сообщение # 2
Сейчас нет на сайте
А что, в ds_grid для каждого пикселя отведена отдельная ячейка? Если нет то это работать и не должно.
Так же имеет смысл переубедиться, что ячейки сетки заполняются правильно.
Принцип проверки столкновений (перебор ячеек, пересекающих область) можно позаимствовать из этого примера.


all500234765Дата: Четверг, 26 Февраля 2015, 20:41 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата YellowAfterlife ()
А что, в ds_grid для каждого пикселя отведена отдельная ячейка? Если нет то это работать и не должно.
Так же имеет смысл переубедиться, что ячейки сетки заполняются правильно.
Принцип проверки столкновений (перебор ячеек, пересекающих область) можно позаимствовать из этого примера.

но мир же рисуется

Добавлено (26 февраля 2015, 20:41)
---------------------------------------------
и да я уже пробовал с этим примером но ничего не получилось...

Fill_FreemanДата: Пятница, 27 Февраля 2015, 13:56 | Сообщение # 4
почетный гость
Сейчас нет на сайте
all500234765, честно не вникал в суть, но мне кажется, что одинаковые условия ставить как минимум странно

if ds_grid_get(gd,x,y+1)==-1{
vsp=8
}else if ds_grid_get(gd,x,y+1)==-1{
vsp=0
}




Сообщение отредактировал Fill_Freeman - Пятница, 27 Февраля 2015, 13:57
all500234765Дата: Воскресенье, 01 Марта 2015, 14:24 | Сообщение # 5
был не раз
Сейчас нет на сайте
я понял поч. неработало все дело в том что я создавал ds_grid xx+=32 yy+=32 for'ом)

Добавлено (01 марта 2015, 14:24)
---------------------------------------------
вообще не прыгает и не падает вот код:

Код
//////Move player///
block_up=ds_grid_get(gd,x,y-16)
block_left=ds_grid_get(gd,x-16,y)
block_right=ds_grid_get(gd,x+16,y)
block_down=ds_grid_get(gd,x,y+16)

if keyboard_check(ord("A")){
     if block_left==-1{
         hsp=-16
     }else{
         hsp=0
     }
     pxs=-1
}
if keyboard_check(ord("D")){
     if block_right==-1{
         hsp=16
     }else{
         hsp=0
     }
     pxs=1
}
if keyboard_check(vk_space){
     if jump==true{
         vsp=16
     }
}

if block_down==-1{
     vsp=-16
     jump=false
}else{
     if block_down>-1{
         vsp=0
         jump=true
     }
}

if keyboard_check_released(vk_space){
     vsp=0
}
if keyboard_check_released(ord("A")){
     hsp=0
}
if keyboard_check_released(ord("D")){
     hsp=0
}

y-=vsp
x+=hsp
view_xview[0]=x-(view_wview[0]/2)
view_yview[0]=y-(view_hview[0]/2)
view_xview = max(0, min(view_xview, room_width - view_wview))
view_yview = max(0, min(view_yview, room_height - view_hview))


Ген. мира
Код
///world_gen(biom(lands,sands,do not use!!!(boss),shadow,steel,snow))
randomize()
var sh
sh=choose(672,704,736,544,864)

var ah
ah=sh
var dirt_level
var stone_level
var water_level
var adl
var c
var v
var tree1
var th
//biom=argument0
globalvar gd,gd2;
gd=ds_grid_create(7521,6000)
ds_grid_set_region(gd,0,0,7521,6000,-1)
/*gd2=ds_grid_create(7521,6000)
ds_grid_set_region(gd2,7521,6000,7521*2,6000,-1)*/

//if biom='lands'{
     c=0
     v=7521
     for(xx=c;xx<v;xx+=16){
         tree1=choose(9,9,10,2,2,3,43,3,4,21,4,5,23)
         global.th=choose(5,6,6,6,6,7,7,7)
         dirt_level=ah+16*choose(2,3,3,3,4,4)
         stone_level=room_height
         water_level=711
          
         if tree1<5 and ah<=water_level*4{
             g=choose(2,2,1,1,1,2)
             if g=1
                 //instance_create(xx,ah-16,tree_generator)
             tree1=choose(9,9,10,2,2,3,43,3,4,21,4,5,23)
         }
          
         //gd[xx,ah-32]=2
         ds_grid_set(gd,xx,ah-16,0)
         //with instance_create(xx,ah-16,solidblock) {image_index=0}
         show_debug_message("GridDebug: created:grass")
          
         if irandom(5)>1 and irandom(5)<4{
             //ds_grid_set(gd,x,y,object_index)
             //show_debug_message("GridDebug: created:tallgrass")
         }
          
         for(yy=ah;yy<dirt_level;yy+=16){
             //gd[xx,yy]=1
             ds_grid_set(gd,xx,yy,1)
             //with instance_create(xx,yy,solidblock) {image_index=1}
             show_debug_message("GridDebug: created:dirt")
             adl=yy
         }
          
         for(yy=adl;yy<stone_level;yy+=16){
             //gd[xx,yy]=3
             ds_grid_set(gd,xx,yy,2)
             //with instance_create(xx,yy,solidblock) {image_index=2}
             show_debug_message("GridDebug: created:stone")
         }
         ah+=16*round(random(choose(0,0,0,0,1,1,2)))*choose(1,-1)
         for(yy=ah-640;yy<ah;yy+=16){
             //with instance_create(xx,yy,empty)
             //show_debug_message("GridDebug: created:empty")
         }
         global.ah[xx/32]=ah
     }
YellowAfterlifeДата: Воскресенье, 01 Марта 2015, 15:19 | Сообщение # 6
Сейчас нет на сайте
Повторюсь, одна из проблем в твоем коде в том, что ты заполняешь лишь каждую 16-ую ячейку сетки, а остальные остаются пустыми.
Вот мой ранее упомянутый пример, переведенный на ds_grid'ы: http://yal.cc/get/xm/alg/alg-col-grid-ds.gmk (еще немного почистил код)




Сообщение отредактировал YellowAfterlife - Воскресенье, 01 Марта 2015, 15:19
all500234765Дата: Воскресенье, 01 Марта 2015, 18:04 | Сообщение # 7
был не раз
Сейчас нет на сайте
а можешь совместить с мои скриптом твою генерацию мира а то дырявая))) а у меня чет не получается...
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг