[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]


Страница 1 из 11
Модератор форума: Spidy, turBO, blitz3d 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Проблема со спрайтом (Торможение процесса из за спрайта)
Проблема со спрайтом
Уга_ЧавесДата: Понедельник, 22.10.2012, 10:14 | Сообщение # 1
ламер
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Дорогие мои человеки помогите кто чем может. При прорисовки на экране спрайта (летящий патрон) происходит явное замедление всего процесса. Коип мощный и исходный код вроде не карявы.

Code
Graphics3D 800,600,32
SetBuffer BackBuffer()
Global camera=CreateCamera() ;Камера  
PositionEntity camera,0,0,-850 ;Каординаты камеры  

Global swet1=CreateLight()  ;освещение

Global samolet1_anime1 = LoadAnimMesh("obekt/samolet1_anime1.b3d") ;загрузка главного самолёта  
Global samolet1_x, samolet1_y, samolet1_z ;каординаты главного самолёта  
   
Global patron1_sprait1 = LoadSprite("sprait/1.png",4) ;загрузка патрона  
ScaleSprite patron1_sprait1,100,15 ;маштаб спрайта  
Global time_patron1_sprait1 ;переменная контроля скорости стрельбы  
Type Patron1 ;списак потронов    
  Field x,y ;начало полёта патрона  
  Field ps1 ;копия потрона  
  End Type
HideEntity patron1_sprait1 ;скрываем патрон
;-------------------------------------------------------
While Not KeyDown(1)
;------------------ управление -------------------------------------
If KeyDown(205) And samolet1_x < 750 Then samolet1_x = samolet1_x + 1
If KeyDown(203) And samolet1_x > -750 Then samolet1_x = samolet1_x - 1
If KeyDown(200) And samolet1_y < 550 Then samolet1_y = samolet1_y + 1
If KeyDown(208) And samolet1_y > -400 Then samolet1_y = samolet1_y - 1

PositionEntity samolet1_anime1,samolet1_x,samolet1_y,samolet1_z
;------------- обработка выстрела ----------------------------------------------------------
If KeyDown(29) And MilliSecs() > time_patron1_sprait1 + 1000 Then  ;нажимаем кнопку агонь ...
  time_patron1_sprait1 = MilliSecs()
  p1.Patron1 = New Patron1 ;создаём патрон
  p1\x = samolet1_x ;начальное положение патрона  
  p1\y = samolet1_y  
  p1\ps1 = CopyEntity (patron1_sprait1) ;копия потрона  
  w = w+1  
EndIf  

For p1.Patron1 = Each Patron1 ;проверяем все патроны  

  If p1\x < 850 Then  ;если патрон на экране  
   p1\x = p1\x + 4 ;скорость патрона (пиксели)  
   PositionEntity p1\ps1,p1\x,p1\y,0;рисуем патрон  
  Else    ;если патрон за приделами экрана  
   FreeEntity p1\ps1
   Delete p1    ;удаляем патрон   
   w = w-1
  End If
Next   
;-------------------------------------------------------------------------------------------------------
UpdateWorld()
RenderWorld()

Flip 0

Wend
;--------------------------------------------------------------------------------------
WaitKey()

End

Слегка поясню самолетик мечется в двух координатах и стреляет в одном направлении (в стиле игры Галактика). Когда начинаю стрелять самолётик начинает двигаться медленней. Что делать как быть, помогите.
 
ParisHiltonДата: Вторник, 23.10.2012, 23:39 | Сообщение # 2
прогер
Группа: Пользователи
Сообщений: 197
Награды: 2
Репутация: 5
Статус: Offline
Проверь сколько весит текстура со спрайтом. Хотя у меня больше подозрение на то, что у тебя при нажатии KeyDown(29) генерится мульйон патронов. Ограничь как-то одним в секунду и посмотри что из этого будет

Мы ищем предмет цели для того чтобы найти результаты его следствия
 
Уга_ЧавесДата: Среда, 24.10.2012, 04:05 | Сообщение # 3
ламер
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
С размером спрайта экспериментировал безрезультатно. На миллион патронов тоже греши. Я мягко говоря начинающий программист, с ограничением у меня тоже проблемы. Не могу придумать иначе как можно сделать ограничение на выстрел. Есть такой вариант:

Code
If KeyHit(29) > k Then  
  k = k + 1
  p1.Patron1 = New Patron1 ;создаём патрон
  p1\x = samolet1_x ;начальное положение патрона  
  p1\y = samolet1_y  
  p1\ps1 = CopyEntity (patron1_sprait1)
EndIf


Только всё безрезультатно.
Проблема решилась, правда низнаю правильным ли путём. Я просто включил вертикальную синхронизацию функцией Flip и всё пошло как надо. Какбы не аукнулась мне это решение в середине проекта.


Сообщение отредактировал Уга_Чавес - Среда, 24.10.2012, 04:39
 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Проблема со спрайтом (Торможение процесса из за спрайта)
Страница 1 из 11
Поиск: