예제 #1
0
    def __init__(self, screen, config, clock):
        super(ActorScene, self).__init__(screen, config, clock)
        rect_container = Rectangle(600, 200, 100, 100)
        rect_container2 = Rectangle(600, 0, 100, 100)
        rect_container3 = Rectangle(0, 0, 100, 100)
        rect_container4 = Rectangle(400, 200, 100, 100)
        rect_wall = Rectangle(0, 200, 400, 400)

        self.__A_wall = wallActor(
            pygame.image.load(
                'F:/练习/PyCharm/PygameTest/resource/Test/wall.jpg'), rect_wall)
        self.__A_container = containerActor(
            pygame.image.load(
                'F:/练习/PyCharm/PygameTest/resource/Test/container1.jpg'),
            rect_container)
        self.__A_container2 = containerActor(
            pygame.image.load(
                'F:/练习/PyCharm/PygameTest/resource/Test/container2.jpg'),
            rect_container2)
        self.__A_container3 = containerActor(
            pygame.image.load(
                'F:/练习/PyCharm/PygameTest/resource/Test/container3.jpg'),
            rect_container3)
        self.__A_container4 = containerActor(
            pygame.image.load(
                'F:/练习/PyCharm/PygameTest/resource/Test/container4.jpg'),
            rect_container4)
        self.__A_container2.physicalBody.vel = vec2(0, 3)
        self.__A_container3.physicalBody.vel = vec2(0, 3)
        self.ps = physicalScene(Rectangle(0, 0, 800, 600), vec2(0, 0.098),
                                self.startClock)
        self.ps.add(self.__A_container.physicalBody)
        self.ps.add(self.__A_container2.physicalBody)
        self.ps.add(self.__A_container3.physicalBody)
        self.ps.add(self.__A_container4.physicalBody)
예제 #2
0
 def doClockEvent(self, NowClock):
     # if self.FPS != 0:
     #     self.m.update(0.01)
     self.m.applyForce(vec2(0, 9.8))
     if self.mousePressed:
         self.m.applyForce(vec2(4, 0))
     self.m.update(0.1)
     self.m.edges(Rectangle(0, 0, self.width, self.height))
예제 #3
0
 def __init__(self, location, constraintScope, mass=None):
     self.location = location
     self.velocity = vec2()
     self.acceleration = vec2()
     self.constraintScope = constraintScope
     self.mass = mass
     if self.mass is None:
         self.mass = random.randint(1, 10)
예제 #4
0
    def setup(self):
        self.createTextElement('spring length1:')
        self.createTextElement('spring length2:')

        self.m1.local = vec2(100, 100)
        self.m2.local = vec2(200, 100)
        self.m3.local = vec2(100, 200)
        self.m4.local = vec2(200, 200)

        self.m5.local = vec2(280, 150)
예제 #5
0
 def __init__(self, i, area):
     self.ang_vel = 0
     self.vel = vec2()
     self.area = area
     self.acc_a = vec2()
     self.moi = i
     self.acc = vec2()
     self.angle = 0
     self.ang_acc = 0
     self.new_ang_acc = 0
     self.drag = 0.04
예제 #6
0
 def __init__(self, mass=0, pos=vec2()):
     self.mass = mass
     self.vel = vec2()
     self.acc = vec2()
     self.pos = pos
     self.bodyType = 0
     self.drag = vec2()
     self.angularDrag = vec2()
     self.active = True
     self.isCollideChecked = False
     self.hasCollidedProbe = False
예제 #7
0
 def draw(self):
     for c in self.__circleLis:
         if c.edges(self.width, self.height):
             c.growing = False
         else:
             for oth in self.__circleLis:
                 if c != oth:
                     _d = vec2(c.x, c.y).dist(vec2(oth.x, oth.y))
                     if _d - 2 < c.r + oth.r:
                         c.growing = False
                         break
         self.Circle(c, (255, 255, 255), 1)
         c.grow()
예제 #8
0
 def __init__(self, screen, config, startClock):
     super(TestPainterScene, self).__init__(screen, config, startClock)
     self.painter = Painter(self.screen)
     self.points = []
     for i in range(0, 6):
         x = random.randint(0, 800)
         y = random.randint(0, 400)
         self.points.append(vec2(x, y))
     self.rect = Rectangle(400, 100, 200, 100)
     self.line = Ray(vec2(200, 200), math.radians(30), 400)
     self.white = (255, 255, 255)
     self.tra = Triangle(point2(100, 100), point2(60, 180),
                         point2(140, 180))
     self.circle = Circle(400, 300, 100)
     self.ellipse = Ellipse(400, 300, 160, 70)
예제 #9
0
    def __createCircle(self):
        _x = random.randint(0, 800)
        _y = random.randint(0, 600)

        _flg_valid = True

        for c in self.__circleLis:
            _d = vec2(c.x, c.y).dist(vec2(_x, _y))
            if _d < c.r:
                _flg_valid = False
                break

        if _flg_valid:
            return CircleEle(_x, _y)
        else:
            return None
예제 #10
0
    def cast(self, a, b):
        x1 = a.x
        y1 = a.y
        x2 = b.x
        y2 = b.y

        x3 = self.pos.x
        y3 = self.pos.y
        x4 = self.pos.x + self.dir.x
        y4 = self.pos.y + self.dir.y
        dt = dtm2(x1 - x3, x3 - x4, y1 - y3, y3 - y4)
        du = dtm2(x1 - x2, x1 - x3, y1 - y2, y1 - y3)
        dd = dtm2(x1 - x2, x3 - x4, y1 - y2, y3 - y4)
        dd_val = dd.val()

        if dd_val == 0:
            return

        t = dt.val() / dd_val
        u = du.val() / dd_val

        if 0 < t < 1 and u > 0:
            return vec2(x1 + t * (x2 - x1), y1 + t * (y2 - y1))
        else:
            return
예제 #11
0
 def __init__(self, *args):
     super(SpringMassSystemTestScene, self).__init__(*args)
     self.springMassSys = SMSystem(10,
                                   2.0,
                                   0.9, 40, 0.2,
                                   vec2(0, 0.098),
                                   2, 2, 1, 2, 700)
예제 #12
0
 def __init__(self, *args):
     super(kaleidoscope, self).__init__(*args)
     self.symmetry = 6
     self.angle = math.radians(360 / self.symmetry)
     self.isFill = False
     self.v = vec2(self.width / 2, self.height / 2)
     self.caption = '测试场景:万花筒  按下鼠标按键进行绘制,按q键清屏'
     self.painter = Painter(self.screen)
예제 #13
0
 def __createModel_LINE(self):
     for i in range(self.massSum):
         m = Mass(self.massM)
         m.local = vec2(i * self.springLength, 400)
         self.masses.append(m)
         if i > 0:
             self.springs.append(
                 Spring(self.masses[i - 1], self.masses[i], self.K,
                        self.springLength, self.springFriction))
예제 #14
0
 def draw(self):
     self.push()
     self.rotate(400, 300, self.m.angle)
     self.Rect(self.m.area, (255, 255, 255), 1)
     self.pop()
     if self.mousePressed:
         self.m.applyForce(vec2(100, 100))
         self.m.drag = 0.03
     self.getCreatedElement(0).setText(self.m.angle)
예제 #15
0
 def __init__(self, location):
     self.location = location
     self.mass = 20
     self.G = 1
     self.dragOffset = vec2()
     self.Events = IOEvent3()
     self.Events.appendEvent(ioEvent3Enum.key_D | ioEvent3Enum.keyDown,
                             lambda: self.__X(True), 0)
     self.Events.appendEvent(ioEvent3Enum.key_A | ioEvent3Enum.keyDown,
                             lambda: self.__X(False), 0)
예제 #16
0
    def draw(self):
        f = vec2(0.1, 0)
        self.m.applyForce(f)

        fa = self.a.attract(self.m)
        self.m.applyForce(fa)

        self.m.update()
        # self.a.update()

        self.a.display(self.screen)
        self.m.display(self.screen)
예제 #17
0
    def execute(self, fixed=0):
        variable = self.beginMass.local - self.endMass.local
        var_len = variable.len()
        force = vec2()
        if var_len != 0:
            force += variable.dev(var_len).mul((var_len - self.length) * (-self.K))
        force += (self.beginMass.velocity - self.endMass.velocity).negate().mul(self.frictionConst)
        if not fixed:
            self.beginMass.applyForce(force)
            self.beginMass.update()

        self.endMass.applyForce(force.negate())
        self.endMass.update()
예제 #18
0
    def draw(self):
        if 0 < self.mouseX < self.width and 0 < self.mouseY < self.height:
            mx = self.mouseX - self.width / 2
            my = self.mouseY - self.height / 2
            pmx = self.lastMousePos[0] - self.width / 2
            pmy = self.lastMousePos[1] - self.height / 2

            v1_n = vec2(self.width / 2 + mx, self.height / 2 + my)
            v1_l = vec2(self.width / 2 + pmx, self.height / 2 + pmy)
            v2_n = vec2(self.width / 2 + mx, self.height / 2 - my)
            v2_l = vec2(self.width / 2 + pmx, self.height / 2 - pmy)

            if self.mousePressed:
                self.painter.push()
                for i in range(0, self.symmetry):
                    # v1_n = self.__rotateBy(v1_n, self.width / 2, self.height / 2)
                    # v1_l = self.__rotateBy(v1_l, self.width / 2, self.height / 2)
                    # v2_n = self.__rotateBy(v2_n, self.width / 2, self.height / 2)
                    # v2_l = self.__rotateBy(v2_l, self.width / 2, self.height / 2)

                    self.painter.rotate(self.width / 2, self.height / 2, self.angle)
                    self.painter.Lines([v1_n, v1_l], (255, 255, 255), 1, 0, 1)
                    self.painter.Lines([v2_n, v2_l], (255, 255, 255), 1, 0, 1)
                self.painter.pop()
예제 #19
0
 def __init__(self, *args):
     super(noiseTestScene, self).__init__(*args)
     self.caption = 'Perlin Noise'
     self.sceneCanvas = pygame.Surface((800, 600))
     self.sceneCanvas.fill((255, 255, 255))
     self.noiseScale = 0.02
     self._height, self._width = 600, 800
     self.inc = 0.1
     self.scl = 10
     self.zoff = 0
     self.cols, self.rows = math.floor(self._width / self.scl), math.floor(
         self._height / self.scl)
     self.particles = []
     self.flowField = [vec2()] * (self.cols * self.rows)
     for i in range(0, 2500):
         self.particles.append(Particle(self._width, self._height))
예제 #20
0
    def execute(self):
        for i in range(self.massSum - 1):
            self.springs[i].execute()

        for i in range(self.massSum):
            self.masses[i].applyForce(self.g.mul(self.masses[i].mass))
            self.masses[i].applyForce(self.masses[i].velocity.negate().mul(
                self.airFriction))

            if self.masses[i].local.y > self.groundHeight:
                v = self.masses[i].velocity
                v.y = 0

                self.masses[i].applyForce(v.negate().mul(self.groundFriction))
                v = self.masses[i].velocity
                v.x = 0

                if v.y < 0:
                    self.masses[i].applyForce(v.negate().mul(
                        self.groundAbsorption))

                f = vec2(0, self.groundRepulsion).mul(self.masses[i].local.y -
                                                      self.groundHeight)
                self.masses[i].applyForce(f)
예제 #21
0
 def __init__(self, width, height):
     self.w, self.h = width, height
     self.pos = vec2(random.randint(0, width), random.randint(0, height))
     self.vel, self.acc, self.prevPos = vec2(), vec2(), vec2()
     self.maxSpeed = 2
예제 #22
0
 def setup(self):
     self.springMassSys.createModel()
     self.springMassSys.setConnections((0, vec2(0, 0)))
예제 #23
0
 def __init__(self, m, pos):
     self.vel = vec2()
     self.pos = pos
     self.mass = m
     self.acc = vec2()
     self.new_acc = vec2()
예제 #24
0
 def __init__(self, *args):
     super(verletScene, self).__init__(*args)
     self.caption = 'VerletSceneTest'
     self.m = body(1, vec2(100, 100))
예제 #25
0
 def setup(self):
     self.m.applyForce(vec2(0, 9.8).mul(self.m.mass))
예제 #26
0
 def setup(self):
     self.createTextElement()
     self.m.applyForce(vec2(300, 300))
     self.m.drag = 0
예제 #27
0
 def __init__(self, texture, rect=None):
     super(containerActor, self).__init__(texture, rect)
     self.physicalBody = rigidBody(1, self.area, BodyType.DYNAMIC)
     self.physicalBody.drag = vec2(0, 0)
     self.physicalBody.hasCollidedProbe = True
     self.physicalBody.restitution = 0.8
예제 #28
0
파일: Mass.py 프로젝트: Syclight/ProjectFS
 def reset(self):
     self.acceleration = vec2()
     self.velocity = vec2()
     self.local = vec2()
예제 #29
0
파일: Mass.py 프로젝트: Syclight/ProjectFS
 def __init__(self, m):
     self.mass = m
     self.acceleration = vec2()
     self.velocity = vec2()
     self.local = vec2()
     self.__new_acc = vec2()
예제 #30
0
 def __init__(self, screen, config, clock):
     super(PhysicsScene, self).__init__(screen, config, clock)
     self.m = Mover(vec2(500, 50), Rectangle(0, 0, 800, 600), 1)
     self.a = Attractor(vec2(400, 300))