first push
This commit is contained in:
57
experiments/window_gtk.py
Normal file
57
experiments/window_gtk.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import gi
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GdkPixbuf, cairo
|
||||
|
||||
|
||||
class VPetWindow(Gtk.Window):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
# Fensterkonfiguration
|
||||
self.set_title("vPet")
|
||||
self.set_default_size(48, 48)
|
||||
self.set_app_paintable(True)
|
||||
self.set_decorated(False)
|
||||
self.set_keep_above(True)
|
||||
self.set_accept_focus(False)
|
||||
|
||||
# Entferne den Fensterschatten und wende RGBA-Visual an
|
||||
screen = self.get_screen()
|
||||
visual = screen.get_rgba_visual()
|
||||
if visual:
|
||||
self.set_visual(visual)
|
||||
|
||||
# Mausereignisse ignorieren
|
||||
self.connect("screen-changed", self.on_screen_changed)
|
||||
self.set_app_paintable(True)
|
||||
self.on_screen_changed(None)
|
||||
|
||||
# Lade und zeige das Sprite (virtuelles Haustier)
|
||||
self.image = Gtk.Image()
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file("vpet_sprite.png") # Ersetze mit deinem Sprite
|
||||
self.image.set_from_pixbuf(pixbuf)
|
||||
self.add(self.image)
|
||||
|
||||
self.show_all()
|
||||
|
||||
def on_screen_changed(self, screen):
|
||||
gdk_window = self.get_window()
|
||||
if gdk_window:
|
||||
# Eingabeform auf das Sprite beschränken
|
||||
region = Gdk.cairo_region_create_from_surface(self.get_mask())
|
||||
gdk_window.input_shape_combine_region(region)
|
||||
|
||||
def get_mask(self):
|
||||
# Maske für die Eingabe basierend auf der Sprite-Form erstellen
|
||||
pixbuf = self.image.get_pixbuf()
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, pixbuf.get_width(), pixbuf.get_height())
|
||||
cr = cairo.Context(surface)
|
||||
Gdk.cairo_set_source_pixbuf(cr, pixbuf, 0, 0)
|
||||
cr.paint()
|
||||
return surface
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
win = VPetWindow()
|
||||
win.connect("destroy", Gtk.main_quit)
|
||||
Gtk.main()
|
||||
90
experiments/window_opengl.py
Normal file
90
experiments/window_opengl.py
Normal file
@@ -0,0 +1,90 @@
|
||||
import pygame
|
||||
from OpenGL.GL import *
|
||||
from OpenGL.GLU import *
|
||||
from OpenGL.GLUT import *
|
||||
import sys
|
||||
import os
|
||||
|
||||
|
||||
# Pet Attribute
|
||||
class VirtualPet:
|
||||
def __init__(self):
|
||||
self.happiness = 50
|
||||
self.hunger = 50
|
||||
|
||||
def feed(self):
|
||||
self.hunger -= 10
|
||||
self.happiness += 5
|
||||
|
||||
def pet(self):
|
||||
self.happiness += 10
|
||||
|
||||
def update(self):
|
||||
self.hunger += 0.1
|
||||
self.happiness -= 0.05
|
||||
|
||||
|
||||
# OpenGL-Setup
|
||||
def init_opengl():
|
||||
glEnable(GL_BLEND) # Aktiviert Transparenz
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
||||
glEnable(GL_DEPTH_TEST)
|
||||
glClearColor(0.2, 0.6, 0.8, 0.0) # Himmelblau mit Transparenz (Alpha = 0.5)
|
||||
gluPerspective(45, (800 / 600), 0.1, 50.0)
|
||||
|
||||
|
||||
# Pet zeichnen (Würfel als Platzhalter)
|
||||
def draw_pet():
|
||||
glPushMatrix()
|
||||
glColor4f(0, 0, 0, 0.2)
|
||||
glTranslatef(0.0, 0.0, -5)
|
||||
glRotatef(pygame.time.get_ticks() * 0.05, 0, 1, 0) # Rotation
|
||||
glutWireCube(1) # Zeichnet den Würfel
|
||||
glPopMatrix()
|
||||
|
||||
|
||||
# Hauptprogramm
|
||||
def main():
|
||||
# Setze Umgebungsvariablen für transparentes Fenster
|
||||
os.environ['SDL_VIDEODRIVER'] = 'x11'
|
||||
os.environ['SDL_VIDEO_WINDOW_POS'] = '0,0'
|
||||
os.environ['SDL_VIDEO_CENTERED'] = '1'
|
||||
|
||||
pygame.init()
|
||||
display = pygame.display.set_mode((48, 48), pygame.DOUBLEBUF | pygame.OPENGL | pygame.NOFRAME | pygame.SRCALPHA)
|
||||
pygame.display.set_caption("Transparent Virtual Pet")
|
||||
clock = pygame.time.Clock()
|
||||
display.set
|
||||
|
||||
pet = VirtualPet()
|
||||
glutInit() # Initialisiert GLUT
|
||||
init_opengl()
|
||||
|
||||
# Setze Transparenz für das Fenster
|
||||
# pygame.display.set_mode((800, 600), pygame.OPENGL | pygame.DOUBLEBUF | pygame.NOFRAME | pygame.SRCALPHA)
|
||||
|
||||
running = True
|
||||
while running:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
running = False
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_f:
|
||||
pet.feed()
|
||||
elif event.key == pygame.K_p:
|
||||
pet.pet()
|
||||
|
||||
pet.update()
|
||||
|
||||
# OpenGL Rendering
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
||||
draw_pet()
|
||||
pygame.display.flip()
|
||||
clock.tick(60)
|
||||
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user