小编No *_*ing的帖子

像Pixi.js这样的2D绘图框架如何使画布绘制更快?

我在这里找到了Javascript画布的兔子标记.

当然,我知道他们的默认渲染器使用的是webGL,但我现在只对本机2D上下文性能感兴趣.我在firefox上禁用了webGL,在产生了16500个兔子之后,计数器显示了25的FPS.我决定编写自己的一个非常简单的渲染循环,看看Pixi添加了多少开销.令我惊讶的是,我的FPS只有20.

我大致相当于JSFiddle.

所以我决定在这里查看它们的源代码,它似乎并不是魔术在它们的渲染代码中:

do  
{
    transform = displayObject.worldTransform;
            ...
    if(displayObject instanceof PIXI.Sprite)
    {

        var frame = displayObject.texture.frame;

        if(frame)
        {
            context.globalAlpha = displayObject.worldAlpha;

            context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]);

            context.drawImage(displayObject.texture.baseTexture.source, 
                               frame.x,
                               frame.y,
                               frame.width,
                               frame.height,
                               (displayObject.anchor.x) * -frame.width, 
                               (displayObject.anchor.y) * -frame.height,
                               frame.width,
                               frame.height);
        }                      
    }
Run Code Online (Sandbox Code Playgroud)

奇怪的是,似乎他们正在使用链接列表进行渲染循环,两个应用程序上的配置文件显示,虽然我的版本为每帧分配相同数量的CPU时间,但它们的实现显示了尖峰中的CPU使用率.

不幸的是,我的知识在这里结束了,我很好奇是否有人可以了解最新情况.

javascript html5 canvas

16
推荐指数
2
解决办法
6538
查看次数

与pygame相比,为什么pyglet这么慢?

这是代码.5000弹跳旋转红色正方形.(16x16 png)在pygame版本上,我得到30 fps但是带有pyglet的10 fps.对于这种事情,Isnt OpenGl应该更快吗?

pygame版本:

import pygame, sys, random
from pygame.locals import *
import cProfile

# Set FPS
FPS = 60.0
clock = pygame.time.Clock()

# Set window
WINDOWWIDTH= 800
WINDOWHEIGHT = 600

pygame.init()
screen = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))

screen.fill((0,0,0))
background = screen.copy().convert()
image = pygame.image.load("square.png").convert()

class Square(object):
    def __init__(self,x,y):
        self.x = x
        self.y = y
        self.v_x = random.randint(1,100)
        self.v_y = random.randint(1,100)
        self.v_r = random.randint(-100,100)
        self.rotation = 0

    def __rep__(self):
        return "Square %d,%d"%(self.x,self.y)

    def update(self,dt):
        if self.x > WINDOWWIDTH:
            self.v_x *= -1 …
Run Code Online (Sandbox Code Playgroud)

pygame pyglet

7
推荐指数
1
解决办法
1472
查看次数

使用本机JavaScript在画布中获取鼠标位置的最现代方法

首先,我知道这个问题已经问过很多次了。但是,提供的答案不一致,并且使用多种方法来获取鼠标位置。一些例子:

方法1:

canvas.onmousemove = function (event) { // this  object refers to canvas object  
Mouse = {
    x: event.pageX - this.offsetLeft,
    y: event.pageY - this.offsetTop
}
}
Run Code Online (Sandbox Code Playgroud)

方法2:

function getMousePos(canvas, evt) {
var rect = canvas.getBoundingClientRect();
return {
  x: evt.clientX - rect.left,
  y: evt.clientY - rect.top
};
}
Run Code Online (Sandbox Code Playgroud)

方法3:

var findPos = function(obj) {
var curleft = curtop = 0;
if (obj.offsetParent) { 
    do {
       curleft += obj.offsetLeft;
       curtop += obj.offsetTop; 
    } while (obj = obj.offsetParent);
}
return { x …
Run Code Online (Sandbox Code Playgroud)

javascript mouse canvas

5
推荐指数
2
解决办法
2440
查看次数

super().method()与super(self .__ class __,self).method()之间的区别

这是我试图编写的代码:

class A(object):
    def bind_foo(self):
        old_foo = self.foo
        def new_foo():
            old_foo()
            #super().foo()
            super(self.__class__,self).foo()

        self.foo = new_foo

    def __init__(self):
        print("A __init__")          

    def foo(self):
        print("A foo")

class B(A):
    def __init__(self):
        print("B __init__")
        super().__init__()

    def foo(self):
        print("B foo")
        super().foo()

class C(A):
    def __init__(self):
        print("C __init__")
        super().__init__()
        super().bind_foo()

    def foo(self):
        print("C foo")    

b  = B()
b.foo()

c = C()
c.foo()
Run Code Online (Sandbox Code Playgroud)

B类和A类是预期的行为,也就是说,当我打电话时b.foo(),它a.foo()也会调用super().C类是试图模仿孩子B和父A行为,但这次我不想明确地super().foo()放在子类中,但我仍然想要父类foo()调用.它按预期工作.

然而,我不太明白的是A.bind_foo,我必须使用super(self.__class__,self).foo()而不是super().foo.super().foo给了一个

"SystemError: super(): no arguments". …
Run Code Online (Sandbox Code Playgroud)

python inheritance class

4
推荐指数
1
解决办法
6588
查看次数

标签 统计

canvas ×2

javascript ×2

class ×1

html5 ×1

inheritance ×1

mouse ×1

pygame ×1

pyglet ×1

python ×1