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().objectsadd = 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)
c.activate(Motion)
move = 0.10
loc = 0.00
rot = 0.00
loc = 0.00
rot = 0.00
if teclado[events.WKEY]:
loc = move
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]
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()
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;
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;
{
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;
}
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
obj = cena.objects
cam1 = obj["Camera1"]
cam2 = obj["Camera2"]
cam2 = obj["Camera2"]
tecla = g.keyboard.events
if tecla[events.WKEY]:
cena.active_camera = cam1
if tecla[events.SKEY]:
cena.active_camera = cam2
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