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


Страница 1 из 11
Модератор форума: Spidy, turBO, blitz3d 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Полоски блоков не впритык (Тренируюсь на арканоиде)
Полоски блоков не впритык
KamikazeCorpДата: Понедельник, 18.06.2012, 22:18 | Сообщение # 1
ламер
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Приветствую.
Юзаю Blitz3D.
Столкнулся с проблемой, возможно небольшой, но не понятной мне.
У мну в арканоиде несколько полосок блоков, так вот, если размер блока через ScaleEntity изменить, по оси У, например поставить 0.2, то между горизонтальными полосками образуются черные пустоты, если оставить 1, то они впритык друг к другу, как бороться не знаю. И почему-то блоков по Х на 1 больше чем в массиве.
Вот код пока что всей программы.

AppWidth=800; shirina ekrana
AppHeight=600; visota ekrana

Graphics3D AppWidth,AppHeight,32,2
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam,0,0,-5
svet=CreateLight()
PositionEntity svet,-45,45,0
board=CreateSphere()
ScaleEntity board,0.8,0.1,0.3
EntityColor board,10,100,255

HidePointer

Type block1 ;tip blocka
Field Life ;life blocka
End Type

;etalon block
block=CreateCube()
ScaleEntity block,1,0.2,0.1

;sozdaem blocks
Dim MBlocks(4,3)
For i=0 To 3
For j=0 To 2
MBlocks(i,j)=CopyEntity(block)
PositionEntity MBlocks(i,j),i,j,0
EntityColor MBlocks(i,j),Rnd(0,255),Rnd(0,255),Rnd(0,255)
Next
Next

;mouse
MoveMouse AppWidth/2,AppHeight/2
Repeat
mx#=MouseXSpeed()*0.02;*0.02-shag dviga board
my#=MouseYSpeed()*0.02
MoveEntity board,mx#,EntityYaw(board)-my#,0

;system
UpdateWorld
UpdateNormals block
UpdateNormals board
RenderWorld
Flip
Until KeyHit(1)
End


Сообщение отредактировал KamikazeCorp - Понедельник, 18.06.2012, 22:21
 
turBOДата: Четверг, 21.06.2012, 19:59 | Сообщение # 2
Полковник
Группа: Администраторы
Сообщений: 297
Награды: 5
Репутация: 12
Статус: Offline
Кто сказал, что блоков по Х на 1 больше? У тебя цикл бежит от 0 до 3.
Используй этот код, тебе будет понятнее работа ф-ции ScaleEntity (понажимай клавиши курсора)
Code
AppWidth=800; shirina ekrana    
AppHeight=600; visota ekrana    

Global scl_width#=1
Global scl_height#=0.2    

Graphics3D AppWidth,AppHeight,32,2    
SetBuffer BackBuffer()    

cam=CreateCamera()    
PositionEntity cam,0,0,-5    
svet=CreateLight()    
PositionEntity svet,-45,45,0    
board=CreateSphere()    
ScaleEntity board,0.1,0.1,0.1;3    
EntityColor board,10,100,255    

HidePointer    

Type block1 ;tip blocka    
    Field Life ;life blocka    
End Type    

;etalon block    
block=CreateCube()    
ScaleEntity block,scl_width,0.2,scl_height    

;sozdaem blocks    
Dim MBlocks(4,3)    
For i=0 To 3    
    For j=0 To 2    
     MBlocks(i,j)=CopyEntity(block)    
     PositionEntity MBlocks(i,j),i,j,0    
     EntityColor MBlocks(i,j),Rnd(0,255),Rnd(0,255),Rnd(0,255)    
    Next    
Next    
HideEntity block
;mouse    
MoveMouse AppWidth/2,AppHeight/2    
Repeat    
    mx#=MouseXSpeed()*0.02;*0.02-shag dviga board    
    my#=MouseYSpeed()*0.02    
    MoveEntity board,mx#,EntityYaw(board)-my#,0    
       
;system    
    UpdateWorld    
    UpdateNormals block    
    UpdateNormals board    
    Update_keys()
    RenderWorld    
    Flip    
Until KeyHit(1)    
End    

Function Update_keys()
       
    If KeyDown(200) Then scl_width=scl_width+.001
    If KeyDown(208) Then scl_width=scl_width-.001
    If KeyDown(203) Then scl_height=scl_height+.001
    If KeyDown(205) Then scl_height=scl_height-.001
    For i=0 To 3    
     For j=0 To 2    
      ScaleEntity MBlocks(i,j) ,scl_width,scl_height,0.1
     Next    
    Next
       
End Function


If 2+2<>4 Then Restart
 
KamikazeCorpДата: Вторник, 26.06.2012, 00:29 | Сообщение # 3
ламер
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Спасибо за пример.
Ошибку исправил, сделал следующим образом:
Создал тип блока, потом прописал его размеры в константы, а дальше генерировал новые блоки в массиве с учетом размера блоков.

Type Block1 ;tip blocka
Field XY
Field Life ;life blocka
End Type

Const SX#=0.3
Const SY#=0.15
Const SZ#=0.1

;sozdaem blocks

Dim MBlocks(i,j)
;PositionEntity MBlocks(i,j),APP_WIDTH/2,APP_HEIGHT/2,0
For i=0 To 9
For j=0 To 4
Blocks.block1=New Block1
Blocks\XY=CreateCube()
ScaleEntity Blocks\XY,SX#,SY#,SZ#
PositionEntity Blocks\XY,(SX#*2)*i,(SY#*2)*j,0
EntityColor Blocks\XY,Rnd(0,255),Rnd(0,255),Rnd(0,255)

Next
Next

Теперь блоки впритык друг к другу и по Х и по У и размеры не меняются.
Возникла другая проблема, как сделать центровку всего этого массива по Х и У относительно экрана? Может сделать ему родителя и заставить стоять относительно родительских координат? Сам родитель будет скрыт и стоять в 0,0,0

Добавлено (26.06.2012, 00:29)
---------------------------------------------
разобрался, тема закрыта.

Сообщение отредактировал KamikazeCorp - Пятница, 22.06.2012, 12:40
 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Полоски блоков не впритык (Тренируюсь на арканоиде)
Страница 1 из 11
Поиск: