XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
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
Tobi123

offline
Опыт: 7,826
Активность:
Отладку в цикл. Сет юнит икс и игрек не работают, если скорость цели равна нулю. Сетюнитпозишн есть координатный, а не использующий точку. Делайте отладку в цикле и проверяйте, скорее всего из-за него.
Старый 01.12.2014, 10:16
adic3x

offline
Опыт: 108,439
Активность:
call SetUnitPositionLoc( uUnit, Location(udg_Tracabl_X[Xi+Xj], udg_Tracabl_Y[Yh]) )
Уточка утечка.
Старый 01.12.2014, 13:21
Кет

offline
Опыт: 111,109
Активность:
собственно,
((код jass
SetUnitPosition(uUnit, udg_Tracabl_X[Xi+Xj], udg_Tracabl_Y[Yh])
))
работает?
Старый 01.12.2014, 14:43
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
velmir

offline
Опыт: 8,257
Активность:
удалил с карты абсолютно всё кроме этих 2х систем лаги прошли..значит утечки стоит искать не в этих конструкциях
Старый 01.12.2014, 19:58
adic3x

offline
Опыт: 108,439
Активность:
Мне в cJass надо было с отступами поступить на манер Python: отступов в блоках нет - ошибка при проверки синтаксиса. Извините, но писать код без отступов - все равно, что не подтирать задницу после акта дефекации.
Старый 01.12.2014, 20:53
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:22.