Показать сообщение отдельно
Старый 29.06.2010, 01:38   #39
jfkkk
Знающий
 
Регистрация: 24.07.2006
Сообщений: 261
Написано 476 полезных сообщений
(для 1,238 пользователей)
Re: Ответ: Осваиваем Unity3d. Урок #1

Сообщение от pax Посмотреть сообщение
Хочется узнать мнение о сравнении решений...
На первый взгляд не сложно. Но очевидно, что слезши с Блитца на Юнити сразу не пересядешь. Обладая навыками юзера Basic, на Юнити ничего не сделаешь, нужно изучать С, причем ab ovo ( " с самых яиц", как говорили латиняне). Пока повременю с изучением С#, все же уменя хобби - геймдев, а не программирование. Мне нужен более высокоуровневый двиг.
Ну вообщем, я изначально преполагал такой результат.
Мой код решения этой задачи на Xorse (с аццкими переборами)
; Include header file
Include "xors3d.bb"

; setup maximum supported AntiAlias Type
xSetAntiAliasType xGetMaxAntiAlias()

; set application window caption
xAppTitle "Simple_AI sample"

; initialize graphics mode
xGraphics3D 800, 600, 32, 0,0;False, True
xCreateDSS 1024, 1024
; set texture filtring
xSetTextureFiltering TF_ANISOTROPICX16

; hide mouse pointer
;xHidePointer()

; enable antialiasing
xAntiAlias True

; create camera
Global camera = xCreateCamera()
xCameraRange camera, 0.1, 1000
; position camera
xPositionEntity camera, 0, 5, -10
xCameraEnableShadows camera
xCameraProjMode(camera, 1)

;land
land= xCreateCube()
xScaleEntity land,1000,0.1,1000
xEntityColor land,50,100,20



; for mouse look
xMoveMouse xGraphicsWidth() / 2, xGraphicsHeight() / 2
mousespeed#       = 0.5 
camerasmoothness# = 4.5

; create light
 light = xCreateLight(2)
xLightRange light,150
;xRotateEntity light, 45, 0, 0
xPositionEntity light, 0, 55, -2
;xLightColor light, 125, 255, 0

; shadows
xInitShadows(1024, 0, 1024)
; set shadows params
xLightEnableShadows light,True
xSetShadowParams 4, 0.85, True, 300
xLightShadowEpsilons light, 0.01, 0.0

Type player
Field ent,model
Field id$
Field old_Z#,old_X#,dist#,x#,z#
Field run_flag
End Type

Function create_player(x#,y#,z#,id)
p.player= New player
p\ent=xCreatePivot()
p\model=xCreateCube()
xEntityColor p\model, 255,25,25
xPositionEntity p\model, x#,y#,z#
xEntityType p\model,1
p\id$="player"+id

End Function 

Function AI_player()
For p.player=Each player

    For b.bot=Each bot
      If xEntityDistance (p\model,b\model)<=5  Or xEntityCollided(p\model,bot) 
         p\old_Z#=xEntityZ_#(p\model,1)
         p\old_X#=xEntityX_#(p\model,1)
         xTurnEntity( p\model, 0,(( -xDeltaYaw# ( b\model,p\model )*.5))+Rnd(90), 0 )
      EndIf 
   Next

   ;run and checck distance between old position and new position
    p\x# = p\old_X# - xEntityX_#(p\model,1)
    p\z# = p\old_Z# - xEntityZ_#(p\model,1) 
    p\dist# = Sqr(p\x#*p\x# + p\z#*p\z#)
    If p\dist#<10 xMoveEntity  p\model,0,0,.7
   

Next


End Function

For i=1 To 5
 create_player(Rnd(50),1,Rnd(50),i)
Next


Type bot
Field ent,model
Field id$,current_enemy$,nm
End Type


Function create_bot(x#,y#,z#,id,current_enemy$)
 b.bot= New bot
 b\ent=xCreatePivot()
 b\model=xCreateCube()
 xEntityColor b\model, 200,150,0
 xPositionEntity b\model, x#,y#,z#
 xEntityPickMode b\ent,1
 xEntityType b\model,1
 ;xNameEntity(b\model, Handle(b)) 
 ;b\nm=xEntityName
 b\id$="bot"+id
 b\current_enemy$=current_enemy$

End Function 

For i=1 To 15
   create_bot(Rnd(250),1,Rnd(250),i,"player"+Rand(1,5))
Next


Function AI_bots()
For b.bot=Each bot
  For p.player=Each player
      If p\id$=b\current_enemy$ 
         xTurnEntity( b\model, 0,( xDeltaYaw# ( b\model,p\model )*.1), 0 )
         xMoveEntity  b\model,0,0,.1  
      EndIf
      ;check new enemy
      If p\id$<>b\current_enemy$
         If xEntityDistance (b\model,p\model)<5
            b\current_enemy$=p\id$
         EndIf 
      EndIf 
  Next
  
Next

End Function


Function info_bots()
For b.bot=Each bot
  xCameraProject camera,xEntityX_#(b\model,1),xEntityY_#(b\model,1),xEntityZ_#(b\model,1)
  xText xProjectedX#(), xProjectedY#(), "bot_id  "+b\id$
  xText xProjectedX#(), xProjectedY#()+15, "current_enemy  "+b\current_enemy$
Next
End Function


;set collisions
Const bot=1 
xCollisions bot,bot,1,2

; main program loop
While Not xKeyDown(KEY_ESCAPE)

    ; camera control
    If xKeyDown(KEY_W) Then xMoveEntity camera,  0,  0,  1
    If xKeyDown(KEY_S) Then xMoveEntity camera,  0,  0, -1
    If xKeyDown(KEY_A) Then xMoveEntity camera, -1,  0,  0
    If xKeyDown(KEY_D) Then xMoveEntity camera,  1,  0,  0
    mxs# = CurveValue(xMouseXSpeed() * mousespeed, mxs, camerasmoothness)
    mys# = CurveValue(xMouseYSpeed() * mousespeed, mys, camerasmoothness)
    camxa# = camxa - mxs Mod 360
    camya# = camya + mys
    If camya < -89 Then camya = -89
    If camya >  89 Then camya =  89
    xMoveMouse xGraphicsWidth() / 2, xGraphicsHeight() / 2
    xRotateEntity camera, camya, camxa, 0.0

    AI_bots()
    AI_player()
    
    ; update animations
    xUpdateWorld()
    
    ; render scene
    xRenderWorld(1,True)
    
    If xKeyHit(23) info_enable=1-info_enable
    If info_enable info_bots()

    ; switch back buffer
    xFlip()
    
Wend

; for camera mouse look
Function CurveValue#(newvalue#, oldvalue#, increments)
    If increments >  1 Then oldvalue# = oldvalue# - (oldvalue# - newvalue#) / increments 
    If increments <= 1 Then oldvalue# = newvalue# 
    Return oldvalue# 
End Function
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (29.06.2010)