我想要一个圆圈,当点击时,移动到屏幕上的其他位置。但是,当我点击圆圈时,没有任何反应。
global $wpdb;
$your_query = "SELECT * FROM wp_posts";
$results = $wpdb->get_results($your_query);
foreach ($results as $post){
// your loop output here
}
答案 0 :(得分:0)
我不熟悉pyglet,但我猜测问题是你正在检查是否x == circle.x
等,这意味着它只会在你单击圆圈正中心的单个像素时移动。尝试距离中心的某种最大距离(例如斜边math.sqrt( (x-circle.x)**2 + (y-circle.y)**2) < circle.radius
答案 1 :(得分:0)
import pyglet
from pyglet.gl import *
from random import randint
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
class Circle(pyglet.sprite.Sprite):
def __init__(self, radiance=5, x=0, y=0):
self.texture = pyglet.image.load('circle.png')
super(Circle, self).__init__(self.texture)
def click(self, x, y):
if x >= self.x and y >= self.y:
if x <= self.x + self.texture.width and y <= self.y + self.texture.height:
return self
mouse = pyglet.window.mouse
#VARS
window = pyglet.window.Window(width = 640, height = 480)
score = 0
#circleImg = pyglet.image.load("circle.png")
#circle = pyglet.sprite.Sprite(circleImg, randint(1, window.width), randint(1, window.height))
circle = Circle(x=50, y=50)
text = pyglet.text.Label("Click red!", font_name = "Times New Roman", font_size = 18, x = 260, y = 10)
#DETECT MOUSE PRESS ON CIRCLE
@window.event
def on_mouse_press(x, y, button, modifiers):
if circle.click(x, y):
print('Clicked in circle')
circle.x = randint(0, window.width - 10)
circle.y = randint(0, window.height - 10)
@window.event
def on_draw():
window.clear()
text.draw()
circle.draw()
pyglet.app.run()
对此操作的简短描述是它创建了一个名为Circle
的自定义类,它继承了Sprite
类。它将circle.png
加载为带有Alpha通道的纹理,该通道由GL库混合。
我们添加一个名为click
的自定义函数,用于检查最低x,y
坐标是否高于最低x,y
的圆,然后检查光标是否在x+width
以下和y
图像区域相同。
如果是这种情况,我们将循环精灵类作为True
值返回,以防我们想要使用精灵。
您应该使用gl functions绘制圆圈,因此我在类定义中定义了radiance
。但是,光辉从未使用过,它是未来的占位符。
这样你就可以使用数学来定义你是否真的在圈内点击了,但这超出了我的快速答案范围。我必须自己做很多调试才能得到数学加法(它&# 39;不是我强硬的一面)。
现在使它起作用的是我们使用图像宽度,高度,x和y数据粗略地检查我们是否在图像中,即#34;圆圈&#34;。
作为奖励,我会将此答案添加到增强列表中,因为它包含一些可能有用的内容。一种方法是用自定义pyglet.window.Window
类替换90%的代码来替换全局变量和装饰器。
它看起来像这样:
import pyglet
from pyglet.gl import *
from random import randint
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
key = pyglet.window.key
class Circle(pyglet.sprite.Sprite):
def __init__(self, radiance=5, x=0, y=0):
self.texture = pyglet.image.load('circle.png')
super(Circle, self).__init__(self.texture)
def click(self, x, y):
if x >= self.x and y >= self.y:
if x <= self.x + self.texture.width and y <= self.y + self.texture.height:
return self
class MainScreen(pyglet.window.Window):
def __init__ (self):
super(MainScreen, self).__init__(800, 600, fullscreen = False)
self.x, self.y = 0, 0
self.bg = pyglet.sprite.Sprite(pyglet.image.load('background.jpg'))
self.sprites = {}
self.sprites['circle'] = Circle(x=50, y=50)
self.sprites['label'] = pyglet.text.Label("Click red!", font_name = "Times New Roman", font_size = 18, x = 260, y = 10)
self.alive = 1
def on_draw(self):
self.render()
def on_close(self):
self.alive = 0
def on_mouse_press(self, x, y, button, modifiers):
if self.sprites['circle'].click(x, y):
print('Clicked in circle')
self.sprites['circle'].x = randint(0, self.width - 10)
self.sprites['circle'].y = randint(0, self.height - 10)
def on_key_press(self, symbol, modifiers):
if symbol == key.ESCAPE: # [ESC]
self.alive = 0
def render(self):
self.clear()
self.bg.draw()
for sprite_name, sprite_obj in self.sprites.items():
sprite_obj.draw()
self.flip()
def run(self):
while self.alive == 1:
self.render()
# -----------> This is key <----------
# This is what replaces pyglet.app.run()
# but is required for the GUI to not freeze
#
event = self.dispatch_events()
x = MainScreen()
x.run()