velmir
offline
Опыт:
8,257Активность: |
И снова лаги=(
И снова с вопросом лагов, на сей раз лаги не одноразовые, а действуют на протяжение всего каста системы(но только в мультиплеяре)
Симтема сама по себе простая, ето можна сказать выбор персонажей спомащю стрелок, напримере как в мортал комбат, где двигая стрелками мы двигаем квадратик, выходя за предел выборо мы попадаем в начало, в опшем, вот код(часть ето тока движения вправо влево) к ней используется ище несколько масивов...для роботы( 2 переменые с координатами х(так как возможно разделения по фракциям) и ,у.... (все иди 3 масива состоят по 10 елементов каждый,тобиш куда мы будем двигать квадрат выбора. Кроме них ище 1н логический саси на занятость клетки иным играком или если она пустая.. но даже с 2ми играками начинает жостко лагать, хотя по сути не юзаю ничего сверх затруднительного..(кроме глобалок 3, но веть из-за них не должны быть лаги что приводят карту в неигрантабильный шлак..) ((код jass
Krok =+1 или -1 зависит от того в какую сторону мы двигаемся
integer iUnit = (номер играка инициатора)+1 if udg_IfPic[iUnit] != true {
unit uUnit=udg_Tracabl_Unit[iUnit] integer Xi=udg_Tracabl_Xi[iUnit] integer Xj=udg_Tracabl_Xj[iUnit] integer Yh=udg_Tracabl_Yh[iUnit] loop if udg_MM_Bool[1] == true{ if Xi>=1 and Xi<=10 and Xj==0 { Xj=0 Xi=Xi+Krok } if Xi>10 or (Xj>0 and Xj<11) and Xi!=1{ Xi=10 Xj=Xj+Krok } if Xj>10{ Xi=1 Xj=0 } if Xi<1 { Xi=10 Xj=10 } }else{ if iUnit>=1 and iUnit<=6 { Xi=Xi+Krok Xj=0 if Xi>=11{Xi=1}elseif Xi<1{Xi=10} }elseif iUnit>=7 and iUnit<=12{ Xi=10 Xj=Xj+Krok if Xj>=11{Xj=1}elseif Xj<1{Xj=10} } } exitwhen udg_Tracabl_Aktiv_Shinobi[(20*(Yh-1))+(Xi+Xj)] == false endloop call SetUnitPositionLoc( uUnit, Location(udg_Tracabl_X[Xi+Xj], udg_Tracabl_Y[Yh]) ) udg_Tracabl_Xi[iUnit]=Xi udg_Tracabl_Xj[iUnit]=Xj udg_Tracabl_Yh[iUnit]=Yh uUnit=null } if GetLocalPlayer() == Player(iUnit-1){call PanCameraToTimed(-28996, 29400, 0)} iUnit = 0 )) зи.
да вас наверно удивит эта строчка, веть она лол неоптимальна. ((код jass
call SetUnitPositionLoc( uUnit, Location(udg_Tracabl_X[Xi+Xj], udg_Tracabl_Y[Yh]) )
)) но когда пишу ((код jass
SetUnitX( uUnit,udg_Tracabl_X[Xi+Xj]) SetUnitY( uUnit,udg_Tracabl_Y[Yh]) )) ничего не работает вопше, тойсть сам триг работает а это действие как будто игнорится. Отредактировано Кет, 01.12.2014 в 14:45. |
01.12.2014, 01:43 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Tobi123
offline
Опыт:
7,826Активность: |
Отладку в цикл. Сет юнит икс и игрек не работают, если скорость цели равна нулю. Сетюнитпозишн есть координатный, а не использующий точку. Делайте отладку в цикле и проверяйте, скорее всего из-за него. |
01.12.2014, 10:16 | #2
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
|
01.12.2014, 13:21 | #3
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Кет
offline
Опыт:
111,373Активность: |
собственно,
((код jass
SetUnitPosition(uUnit, udg_Tracabl_X[Xi+Xj], udg_Tracabl_Y[Yh]) )) работает? |
01.12.2014, 14:43 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
velmir
offline
Опыт:
8,257Активность: |
Кет:
да но лагать не перестало.. я отключал поетапно фрагменты кода и кажись дествительно дело или в цыкле или именно в
((код jass
udg_Tracabl_Aktiv_Shinobi[(20*(Yh-1))+(Xi+Xj)] == false
)) udg_Tracabl_Aktiv_Shinobi ета переменая состоит из 200 елементов( в масиве) udg_Tracabl_Xi[iUnit], udg_Tracabl_Xj[iUnit], udg_Tracabl_Yh[iUnit]=Yh эти по десеть я уже цыкл переберать тоже думал невышло избавится от лагов.. velmir добавил:
а еще к делу вот движение верх в низ, в нём менше ифов но лаги серавно есть integer iUnit = номер играка инициатора +1 Krok+ или - 1 (Верх в низ) ((код jass
unit uUnit=udg_Tracabl_Unit[iUnit]
integer Xi=udg_Tracabl_Xi[iUnit] integer Xj=udg_Tracabl_Xj[iUnit] integer Yh=udg_Tracabl_Yh[iUnit] if udg_IfPic[iUnit] != true { loop Yh=Yh+Krok if Yh==8 and Krok==1{ Yh=9 }elseif Yh==8 and Krok==-1 { Yh=7 } if Yh>10{ Yh=1 }elseif Yh<1{ Yh=10 } exitwhen udg_Tracabl_Aktiv_Shinobi[(20*(Yh-1))+(Xi+Xj)] == false endloop call SetUnitPosition(uUnit, udg_Tracabl_X[Xi+Xj], udg_Tracabl_Y[Yh]) udg_Tracabl_Xi[iUnit]=Xi udg_Tracabl_Xj[iUnit]=Xj udg_Tracabl_Yh[iUnit]=Yh uUnit=null } if GetLocalPlayer() == Player(iUnit-1){ call PanCameraToTimed(-28996, 29400, 0) } iUnit = 0 )) velmir добавил:
еще вставлял в цыкл щечик на подщитку кол.действий, он работает нормально.. в опшем вся система с 2 кодов работает хорошо без багов но с жуткими лагами =( velmir добавил: открытие века, не шучу, просто подсчитал что серезно лагать начинает после 3 клика(всеравно на какую стрелку), после 7 клика играть уже невозможно =(, утечки. |
01.12.2014, 15:09 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
velmir
offline
Опыт:
8,257Активность: |
удалил с карты абсолютно всё кроме этих 2х систем лаги прошли..значит утечки стоит искать не в этих конструкциях |
01.12.2014, 19:58 | #6
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
Мне в cJass надо было с отступами поступить на манер Python: отступов в блоках нет - ошибка при проверки синтаксиса. Извините, но писать код без отступов - все равно, что не подтирать задницу после акта дефекации. |
01.12.2014, 20:53 | #7
+8/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|