sábado, 4 de janeiro de 2020

00=BGE PRIMEIROS PASSOS

olá amigos a muito tempo atrás lá no blender2.60 eu já começava a dar primeiros passos na bge, porem eu sempre pesquisava sobre o assunto na net e não havia muita coisa, a minha intenção e não só criar um blog,mais que explique tudo sobre a bge de uma forma clara, sem enrolar, mais também criar uma biblioteca de funções e módulos com tudo que se possa usar para criar qualquer tipo de jogo no blender bge ou upbge e nas possíveis bge futura.


aqui vai algum dos exemplos que eu fiz nos tutoriais da bge vicio 



no primeiro exemplo era de adicionar objetos, porem isso e feito pela engine que também pode ser feito pelo jogador

o script
from bge import logic as g
add = g.getCurrentScene().addObject
add("vai_aparecer","caixa",90)


no segundo foi feito usando a posição do mouse ,pode ser usar física normal do jogo (character,soft body,rigid body,dynamic). isso só para poder ver as variações podem ser feitas.
                                                                            

O SCRIPT
from bge import logic as g
c = g.getCurrentController()
s = g.getCurrentScene().objects
add = g.getCurrentScene().addObject
Mouse = c.sensors["Mouse"]
over  = c.sensors["over"]
ms = over.hitPosition
Empty = s["Empty"]
Empty.localPosition = ms

if Mouse.positive:
    add("aparece","Empty",2000)


 o terceiro exemplo mouselook, não ficou muito bom para min, porem isso e uma questão de calibragem nas configurações.
                                                                    
   
    O SCRIPT
from bge import logic as g, render as r
c = g.getCurrentController()
o = c.owner
m = c.sensors["Mouse"]
p = o.parent
w1 = r.getWindowHeight()
w2 = r.getWindowWidth()
h1 = w1//2
h2 = w2//2
s = 0.0001
x,y = m.position
x = (h1-x)*s
y = (h2-y)*s
o.applyRotation([y,0.0,0.0],True)
p.applyRotation([0.0,0.0,x],False)
r.setMousePotion(h1,h2)


no quarto exemplo acho que o mais básico de todo vídeo de youtube e o movimento do cubo, pode ser feitas varias formas .
                                                                          O SCRIPT
from bge import logic as g, events
c = g.getCurrentController()
o = c.owner
teclado = g.keyboard.events
Motion = c.actuators["Motion"]
c.activate(Motion)
move = 0.10
loc  = 0.00
rot  = 0.00
if teclado[events.WKEY]:
    loc = move
if teclado[events.SKEY]:
    loc = -move
   
if teclado[events.AKEY]:
    rot = move
   
if teclado[events.DKEY]:
    rot = -move
   
Motion.dLoc = [0.0,loc,0.0]
Motion.dRot = [0.0,0.0,rot]
                    


no quinto exemplo e um dos que mais se necessita em qualquer jogo SALVAR E CARREGAR
um dos melhores exemplo do canal bge vicio .
                                                                   

O SCRIPT
(SALVAR)
from bge import logic as g, events
con = g.getCurrentController()
bola = g.getCurrentScene().objects["Sphere"]
Mouse = con.sensors["Mouse"].hitObject
clique = g.mouse.events[events.LEFTMOUSE]
if Mouse != None and clique:
    if "salvar" in str(Mouse):
        salva = open("salvar.txt","w")
        salva.write(str(bola.position.x)+"\n")
        salva.write(str(bola.position.y)+"\n")
        salva.write(str(bola.position.z)+"\n")
        salva.close()

(CARREGAR)
from bge import logic as g, events
con = g.getCurrentController()
bola = g.getCurrentScene().objects["Sphere"]
Mouse = con.sensors["Mouse"].hitObject
clique = g.mouse.events[events.LEFTMOUSE]
if Mouse != None and clique:
    if "carregar" in str(Mouse):
        carrega = open("salvar.txt","r")
        x = float(carrega.readline())
        y = float(carrega.readline())
        z = float(carrega.readline())
       
        bola.position.x = x
        bola.position.y = y
        bola.position.z = z
       
        carrega.close


no exemplo sexto e o famoso script cell sharding que e usado em algum jogos como gungrave,okami,xiii, e uma função assim legal da um estilo diferente no jogo.
                                                                            
O SCRIPT
uniform sampler2D bgl_RenderedTexture;
    uniform sampler2D bgl_DepthTexture;
    void main()
    {
       float depth = texture2D( bgl_DepthTexture, gl_TexCoord[0].xy).r;
       float depth2 = texture2D( bgl_DepthTexture, gl_TexCoord[0].xy + vec2(0,0.00090)).r;
       float depth3 = texture2D( bgl_DepthTexture, gl_TexCoord[0].xy + vec2(0.00090,0)).r;
      
       float fac = abs(depth-depth2) + abs(depth-depth3);
      
       float intensity = 900;
       vec4 sub = vec4(fac*intensity,fac*intensity,fac*intensity,0);
      
       gl_FragColor = texture2D( bgl_RenderedTexture, gl_TexCoord[0].xy ) - sub;
    }


e utlimo exemplo a troca de câmera usada em algums jogos como gta,jogos de corrida,
                                                                                
                                 
O SCRIPT

from bge import logic as g, events
c = g.getCurrentController()
cena = g.getCurrentScene()
obj  = cena.objects
cam1 = obj["Camera1"]
cam2 = obj["Camera2"]
tecla = g.keyboard.events
if tecla[events.WKEY]:
    cena.active_camera = cam1
   
if tecla[events.SKEY]:
    cena.active_camera = cam2

bom e isso por hoje, lembrando toda quinta tem um novo possível assunto aqui no blog, sendo hoje e dominogo dia 4/2020 e talveis tu esteja vendo isso e um futuro distante ,toda quinta vou tentar trazer coisas para blog .











Nenhum comentário:

Postar um comentário