此代码显示图像 assassin1.png在黑色背景上。按下键后,图像就会向右移动,松开键就停止移动。
按下键后,它也应立即更改为图像assassin2.png,释放键时应将其更改回assassin1.png。但是,此代码永远不会assassin2.png在移动时显示图像。为什么会这样,我该如何解决?
import pyglet
class Assassin(pyglet.sprite.Sprite):
def __init__(self, batch, img):
pyglet.sprite.Sprite.__init__(self, img, x = 50, y = 30)
def stand(self):
self.img = pyglet.image.load("assassin1.png")
return self
def move(self):
self.img = pyglet.image.load('assassin2.png')
return self
class Game(pyglet.window.Window):
def __init__(self):
pyglet.window.Window.__init__(self, width = 315, height = 220)
self.batch_draw = pyglet.graphics.Batch()
self.player = Assassin(batch = self.batch_draw, img = pyglet.image.load("assassin1.png"))
self.keys_held = []
self.schedule = pyglet.clock.schedule_interval(func = self.update, interval = 1/60.)
def on_draw(self):
self.clear()
self.batch_draw.draw()
self.player.draw()
def on_key_press(self, …Run Code Online (Sandbox Code Playgroud) pyaudio可以播放.mp3文件吗?如果是的话,请问一个例子.如果不是,将.mp3转换为.wav的最简单方法是什么?
我试过使用PyDub,可以得到我的.wav文件,但是当我尝试用PyAudio播放时,我得到以下错误:
File "C:\Python33\lib\wave.py", line 130, in initfp
raise Error('file does not start with RIFF id')
wave.Error: file does not start with RIFF id
Run Code Online (Sandbox Code Playgroud)
使用其他.wav样本(如果没有从mp3转换),如果效果很好.
我正在使用gTTS库为我的应用程序将文本转换为语音.它会创建我需要播放的短.mp3文件.现在我正在使用
os.system("start english.mp3")
Run Code Online (Sandbox Code Playgroud)
我想找到一个更好的方法来做到这一点.首先,我不想被限制在平台上.其次,我不喜欢当文件开始播放时弹出的播放器,我希望它留在后台.
我试图找到最简单的解决方案,因为我不需要简单的播放.
UPD:我设法用pyglet播放它.看起来很好,除了它需要太长时间......我听到声音之前有大约10秒的延迟.并且它不适用于线程(我想在程序仍在运行时播放.mp3).有没有办法让玩家留在后台而不是弹出所有其他窗户?
以下脚本可以播放原始文件.我尝试以明显的方式分离每个频道,但它不起作用.
import os
import wavio
import numpy
import pyglet
file_name = "guitarup_full.wav"
# I get the file !
File = wavio.read(file_name)
rate = File.rate
# it looks good
print File.data.shape
print rate
# and then the channels:
channel_1 = File.data[:,0]
channel_2 = File.data[:,1]
wavio.write("guitar_channel_1.wav", channel_1, rate )
wavio.write("guitar_channel_2.wav", channel_2, rate )
# now we try to play:
source = pyglet.resource.media(file_name, streaming=False)
source_ch1 = pyglet.resource.media("guitar_channel_1.wav", streaming=False)
source_ch2 = pyglet.resource.media("guitar_channel_2.wav", streaming=False)
#uncomment the one you want to listen.
source.play()
#source_ch1.play()
#source_ch2.play()
pyglet.app.run() …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Pyglet的OpenGL包装器实现拾取,但是我在将C教程转换为Python时遇到了麻烦.具体是下面的部分.
#define BUFSIZE 512
GLuint selectBuf[BUFSIZE]
void startPicking(int cursorX, int cursorY) {
GLint viewport[4];
glSelectBuffer(BUFSIZE,selectBuf);
glRenderMode(GL_SELECT);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glGetIntegerv(GL_VIEWPORT,viewport);
gluPickMatrix(cursorX,viewport[3]-cursorY,
5,5,viewport);
gluPerspective(45,ratio,0.1,1000);
glMatrixMode(GL_MODELVIEW);
glInitNames();
}
我不知道如何转换声明GLuint或GLint的数组,以便glSelectBuffer和glPickMatrix工作.有没有人知道如何使用Pyglet在Python中执行此操作?谢谢.
我有一个搅拌器模型,下面是我将模型加载到python时渲染的图像.看起来法线都搞砸了.我正在为每个顶点使用正确的法线.我正在以正确的顺序导出它们.我在搅拌机控制台中测试了实际导出文件是否具有正确的数据.
我知道我必须在python中旋转模型,因为z轴是不同的,所以我不确定法线z是否指向错误的方向.
我正在使用pyglet.以前有没有人遇到这个问题?有什么想法,我可以做些什么来试图修复它?
我不确定这是一个OpenGL还是python问题.
opengl设置代码:
glMatrixMode(GL_PROJECTION)
zNear = 0.01
zFar = 1000.0
fieldOfView = 45.0
size = zNear * math.tan(math.radians(fieldOfView) / 2.0)
glFrustum(-size, size, -size / (w / h), size /
(w / h), zNear, zFar);
glViewport(0, 0, w, h);
# Set-up projection matrix
# TODO
glMatrixMode(GL_MODELVIEW)
glShadeModel(GL_SMOOTH)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
light0Ambient = (GLfloat * 4)(*[])
light0Ambient[0] = 0.2
light0Ambient[1] = 0.2
light0Ambient[2] = 0.2
light0Ambient[3] = 1.0
glLightfv(GL_LIGHT0, GL_AMBIENT, light0Ambient);
lightpos = (GLfloat * 3)(*[])
lightpos[0] = 5.0
lightpos[1] = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在python中创建徽标可视化,并且我想在3D空间中设置多个图像的动画,使得图像总是"面向"屏幕的中心,并且图像围绕某个固定路径移动.我之前用python使用Vizard完成了这个,但是,我想在一个"免费"和跨平台庄园中这样做.
什么是最快(读取最短的代码量)使用pyglet获取成像映射四边形的句柄,我可以操纵所述四边形的位置和方向?
我正在创建一个有向图,但它最终比我的窗口大,所以不是不断地创建一个更大的窗口,我想允许滚动.稍后我还将允许用户旋转图形,因为它将是3D图形.
那么,我如何在pyglet中滚动?
我找到了这个:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(ClipBox.x1,ClipBox.x2,ClipBox.y1,ClipBox.y2,ClipBox.z1,ClipBox.z2);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)
但我不确定是否有更好的选择.
通过查看http://www.pyglet.org/doc/programming_guide/mouse_events.html我可以看到我需要使用哪些事件,例如鼠标拖动和滚轮,我只需要给用户一个印象即视线正如他们所期望的那样移动
我试图将精灵带到前景,以便它们位于图像的顶层。这是我用来分配图像值的行
ball = pyglet.sprite.Sprite(ball_image, 50, 50)
是否有我可以添加到这条线上的属性来在前景上绘制图像?
编辑:我试图将第一张图像保留在前景中,无论它是在第二张图像之前还是之后绘制。
我试图了解阴影映射是如何独立工作的,并描述了这个 Python 程序来测试阴影映射,这是尽可能的。
我搜索了阴影贴图问题,但我还没有发现这样的事情已经发生了什么,那么我如何为灯光前面的正常旋转立方体着色以及如何校正阴影的位置以使其出现并将其准确地放在表面上?我只是在修改着色器。
import pyglet, math, pyrr, ctypes
import numpy as np
from OpenGL.GL import *
from OpenGL.GL.shaders import *
app = pyglet.window.Window()
v = """
in layout(location=0) vec3 posicao;
uniform mat4 view;
uniform vec3 translate;
uniform float rot;
uniform float rot2;
uniform vec3 t2;
out vec3 outpos;
void main(){
vec3 p = posicao;
p = vec3(sin(rot)*p.x+cos(rot)*p.z,p.y,-sin(rot)*p.z+cos(rot)*p.x);
p = translate+p+t2;
p = vec3(p.x,sin(rot2)*p.z+cos(rot2)*p.y,-sin(rot2)*p.y+cos(rot2)*p.z);
outpos = p;
gl_Position = view*vec4(p,1);
}
"""
f = """
uniform vec3 cor;
uniform int …Run Code Online (Sandbox Code Playgroud)