예제 #1
0
 def set_angle_action(self, proportion, max_duration=4, min_duration=2):
     angle = 360 - proportion * 360
     delta = abs(self.angles - angle)
     if delta <= 10:
         return self.right_ring, Delay(min_duration)
     duration = min(1, delta / 90) * (max_duration - min_duration)
     if self.angles > angle: # right rotation
         if angle >= 180:
             return self.right_ring, (Delay(0.5) + RotateTo(180, duration + min_duration) + CallFunc(self.change_angle, angle))
         elif self.angles <= 180:
             return self.right_ring, (Delay(0.5) + RotateTo(angle, duration + min_duration) + CallFunc(self.change_angle, angle))
         else:
             d1 = (duration + min_duration) * (self.angles - 180) / delta
             d2 = duration + min_duration - d1
             return self.right_ring, (Delay(0.5) + RotateTo(180, d1)
                                + RotateBy(angle - 180, d2) + CallFunc(self.change_angle, angle))
     else: #
         if angle <= 180:
             return self.right_ring, (Delay(0.5) + RotateTo(angle, duration + min_duration) + CallFunc(self.change_angle, angle))
         elif self.angles >= 180:
             return self.right_ring, (Delay(0.5) + RotateTo(angle, duration + min_duration) + CallFunc(self.change_angle, angle))
         else:
             d1 = (duration + min_duration) * (180 - self.angles) / delta
             d2 = duration + min_duration - d1
             return self.right_ring, (Delay(0.5) + RotateBy(180 - self.angles, d1)
                                + RotateBy(angle - 180, d2) + CallFunc(self.change_angle, angle))
예제 #2
0
파일: ui.py 프로젝트: zhy0313/bj163
    def __init__(self):
        super(Pic, self).__init__(0, 0, 0, 0, width=160, height=160)
        # self.addsprite('image/pic.png')
        # self.cp = cocos.sprite.Sprite('image/cp.png')
        # self.cp.scale = 160 / self.cp.height
        # self.cp.position = (80, 80)
        # self.add(self.cp)
        self.addcp()
        self.cp.do(Repeat(RotateBy(360, duration=10)))

        self.gz = cocos.sprite.Sprite('image/gz.png')
        self.gz.scale = 0.3
        self.gz.image_anchor = (117, 204)
        self.gz.position = (80, 170)
        self.add(self.gz, z=1)
        self.gz.do(RotateBy(25, duration=0.5))
def main():
    director.init()
    main_scene = cocos.scene.Scene()
    main_scene.add(ColorLayer(255, 0, 0, 255))
    main_scene.add(TestLayer())
    main_scene.do(RotateBy(360, 2))
    director.run(main_scene)
예제 #4
0
파일: test.py 프로젝트: syfly/PPSJump
    def __init__(self):
        #将层的背景调成蓝色
        super(HelloWorld, self).__init__(64, 64, 224, 255)
        # 新建文字标签用于显示Hello World
        label = cocos.text.Label(
            'Hello,World',
            # 如果要显示中文,需要使用支持中文的字体,比如"微软雅黑"
            font_name='Times New Roman',
            font_size=32,
            # 设置锚点为正中间
            anchor_x='center',
            anchor_y='center')
        # 设置文字标签在层的位置.由于锚点为正中间,即"用手捏"标签的正中间,放到(320,240)的位置
        label.position = 320, 240
        # 把文字标签添加到层
        self.add(label)

        # 新建一个精灵,在这里是一个小人(英文文档没有给示范图片,所以这个icon.png请自行找个q版小人图片,放在代码同目录下)
        sprite = cocos.sprite.Sprite('black.png')
        # 精灵锚点默认在正中间,只设置位置就好
        sprite.position = 320, 240
        # 放大三倍,添加到层,z轴设为1,比层更靠前
        sprite.scale = 3
        self.add(sprite, z=1)

        # 定义一个动作,即2秒内放大三倍
        scale = ScaleBy(3, duration=2)
        # 标签的动作:重复执行放大三倍缩小三倍又放大三倍...Repeat即为重复动作,Reverse为相反动作
        label.do(Repeat(scale + Reverse(scale)))
        # 精灵的动作:重复执行缩小三倍放大三倍又缩小三倍..
        sprite.do(Repeat(Reverse(scale) + scale))
        # 层的动作:重复执行10秒内360度旋转
        self.do(RotateBy(360, duration=10))
예제 #5
0
    def __init__(self):
        # 层调成蓝色
        super(HelloWorld, self).__init__(64, 64, 224, 255)
        label = cocos.text.Label('Hello, World!',
                                 font_name='Times New Roman',
                                 font_size=32,
                                 anchor_x='center', anchor_y='center')
        label.position = 320, 240
        self.add(label)

        # 新建一个精灵,在这里是一个小人(英文文档没有给示范图片,所以这个icon.png请自行找个q版小人图片,放在代码同目录下)
        sprite = cocos.sprite.Sprite('icon.jpg')
        # 精灵锚点默认在正中间,只设置位置就好
        sprite.position = 320, 240
        # 放大三倍,添加到层,z轴设为1,比层更靠前
        sprite.scale = 1
        self.add(sprite, z=1)

        # 定义一个动作,即2秒内放大三倍
        scale = ScaleBy(2, duration=2)
        # 标签的动作:重复执行放大三倍缩小三倍又放大三倍...Repeat即为重复动作,Reverse为相反动作
        label.do(Repeat(scale + Reverse(scale)))
        # 精灵的动作:重复执行缩小三倍放大三倍又缩小三倍...
        sprite.do(Repeat(Reverse(scale) + scale))
        # 层的动作:重复执行10秒内360度旋转
        self.do(RotateBy(360, duration=10))
예제 #6
0
    def __init__(self):
        super(Game, self).__init__(102, 102, 225, 255)

        self.collision_manager = cm.CollisionManagerBruteForce()

        self.player = cocos.sprite.Sprite('eleph2.png')
        self.player.position = 400, 25
        self.player.velocity = 0, 0
        self.player.speed = 150
        self.player.scale = .5
        self.add(self.player, z=2)

        self.player.cshape = cm.AARectShape(self.player.position,
                                            self.player.width // 2,
                                            self.player.height // 2)
        self.collision_manager.add(self.player)

        self.boss = cocos.sprite.Sprite('flaregun.png')
        self.boss.position = 400, 600
        self.boss.scale = 0.4
        self.add(self.boss, z=1)

        self.boss.cshape = cm.AARectShape(self.boss.position,
                                          self.boss.width // 2,
                                          self.boss.height // 2)
        self.collision_manager.add(self.boss)

        self.batch = cocos.batch.BatchNode()
        self.enemies = [cocos.sprite.Sprite('compass.png') for i in range(6)]
        positions = ((250, 125), (550, 125), (300, 325), (500, 325),
                     (150, 475), (650, 475))
        for num, enem in enumerate(self.enemies):
            enem.position = positions[num]
            enem.cshape = cm.AARectShape(enem.position, enem.width // 2,
                                         enem.height // 2)
            self.collision_manager.add(enem)
            self.batch.add(enem)

        self.add(self.batch, z=1)
        self.player.do(Move())

        move_basic = MoveBy((120, 0), 1)
        self.enemies[0].do(Repeat(move_basic + Reverse(move_basic)))
        self.enemies[1].do(Repeat(Reverse(move_basic) + move_basic))

        move_complex = (MoveBy((-75, 75), 1) + Delay(0.5) + MoveBy(
            (-75, -75), 1) + Delay(0.5) + MoveBy(
                (75, -75), 1) + Delay(0.5) + MoveBy((75, 75), 1) + Delay(0.5))
        self.enemies[2].do(Repeat(move_complex))
        self.enemies[3].do(Repeat(Reverse(move_complex)))

        move_jump = AccelDeccel(JumpBy((200, 0), 75, 3, 3))
        move_jump_rot = AccelDeccel(RotateBy(360, 3))
        self.enemies[4].do(Repeat(move_jump + Reverse(move_jump)))
        self.enemies[4].do(Repeat(move_jump_rot + Reverse(move_jump_rot)))
        self.enemies[5].do(Repeat(Reverse(move_jump) + move_jump))
        self.enemies[5].do(Repeat(Reverse(move_jump_rot) + move_jump_rot))

        self.schedule(self.update)
예제 #7
0
def main():
    director.init()
    main_scene = cocos.scene.Scene()
    test_layer = ColorLayer(64, 64, 64, 255)
    test_layer.scale = 0.75
    main_scene.add(test_layer)

    test_layer.do(RotateBy(360, 2))
    director.run(main_scene)
예제 #8
0
    def step(self, dt):
        """

        :param dt: delta time: difference in time between previous frame and next frame
        """
        cm = self.collision_manager

        # add each player to the collision manager. If player is big, set flag to dirty
        # and reset player to small
        for player in self.target.players:
            cm.add(player)
            if player.big:
                player.dirty = True
            player.big = False

        # add each robot to the collision manager. If robot is big, set flag to dirty
        # and reset robot to small
        for robot in self.target.robots:
            cm.add(robot)
            if robot.big:
                robot.dirty = True
            robot.big = False

        # add projectile to collision manager
        for projectile in self.target.projectiles:
            cm.add(projectile)

        # todo castle needs a smaller collision box
        # cm.add(self.target.castle)
        # self.target.castle.big = True

        # go through all collisions for the frame
        for collision in cm.iter_all_collisions():
            # debug
            print(collision[0].coord.xy, collision[1].coord.xy)

            # check each colliding item
            for a in collision:
                other = collision[0] if collision[0] != a else collision[1]

                # if other not a projectile, set it to big and dirty
                if other not in self.target.projectiles or other.owner != self:  # don't need the second condition
                    # just here for completeness
                    a.big = True
                    a.dirty = True

                # if other is a projectile and the other object is not the owner of the projectile
                # remove projectile from layer and list of projectiles and stops the action
                if a in self.target.projectiles and a.owner != other:
                    self.target.remove(a)
                    self.target.projectiles.remove(a)
                    a.stop()

                    other.do(RotateBy(360, 0.5))

        cm.clear()
예제 #9
0
 def take_damage(self, damage):
     self._life -= damage
     if self._life <= 0:
         self._life = 0
         self.is_alive = False
     elif self._life < 1500 and not self.bonus_type:
         self._game.remove(self.sprite)
         self.sprite = Sprite("enemy_damaged.png")
         self.sprite.do(Repeat(RotateBy(360, 1)))
         self._game.add(self.sprite)
예제 #10
0
파일: ui.py 프로젝트: zhy0313/bj163
    def on_mouse_press(self, x, y, buttons, modifiers):
        # print(self.x, self.y)
        if (self.x-self.width//2) <= x <= (self.x+self.width//2) and\
           self.y <= y <= (self.y+self.height):
            # print('right')
            # print('play', x, y)
            if self.pause_flag:
                self.remove(self.play_hl)
                self.add(self.pause_hl)
                self.mpg123.pause()
                self.pic.cp.do(Repeat(RotateBy(360, duration=10)))
                self.pic.gz.do(RotateBy(25, 0.5))
            else:
                self.remove(self.pause_hl)
                self.add(self.play_hl)
                self.mpg123.pause()
                self.pic.stopcp()
                self.pic.gz.do(Reverse(RotateBy(25, 0.5)))

            self.pause_flag = False if self.pause_flag else True
예제 #11
0
    def __init__(self):
        super(Fly, self).__init__()

        rocket = cocos.sprite.Sprite('rocket.png')
        rocket.position = 128, 128
        rocket.scale = 0.5
        #在5秒内往右上方西东,最终横竖坐标分别增加50
        #rocket.do( MoveBy( (320,240), duration=2) )
        #move = MoveTo( (200,200),2 ) + MoveTo( (400,400),3 )
        move = Repeat(RotateBy(360, 2))
        rocket.do(move)
        self.add(rocket, z=0)
예제 #12
0
    def __init__(self):
        super(Title, self).__init__()
        label = cocos.text.Label('测试Cocos2d的适应性',
                                 font_size=32,
                                 anchor_x='center',
                                 anchor_y='center')
        label.position = 320, 260
        self.add(label)
        sprite = cocos.sprite.Sprite('horngirl.png')
        sprite.position = 320, 320
        sprite.scale = 3
        self.add(sprite, z=1)

        scale = ScaleBy(3, duration=2)
        label.do(Repeat(scale + Reverse(scale)))
        self.do(RotateBy(360, duration=10))
예제 #13
0
    def __init__(self):
        super(Rotate, self).__init__(64, 64, 224, 255)
        label = cocos.text.Label('haha!',
                                 font_name = 'miaomiaomiao',
                                 font_size = 32,
                                 anchor_x = 'center',
                                 anchor_y = 'center')
        label.position = 320, 240
        self.add(label)

        sprite = cocos.sprite.Sprite('b.png')
        sprite.position = 320, 240
        sprite.scale = 3
        self.add(sprite, z=1)
        
	scale = ScaleBy(3, duration=2)
        label.do(Repeat(scale + Reverse(scale)))
        sprite.do(RotateBy(360, duration=10))
    def __init__(self):
        super(Game, self).__init__(102, 102, 225, 255)

        self.player = cocos.sprite.Sprite(resources.player)
        self.player.position = 400, 25
        self.player.velocity = 0, 0
        self.player.speed = 150
        self.add(self.player, z=2)

        self.boss = cocos.sprite.Sprite(resources.boss)
        self.boss.position = 400, 600
        self.boss.scale = 0.4
        self.add(self.boss, z=1)

        self.batch = cocos.batch.BatchNode()
        self.enemies = [cocos.sprite.Sprite(resources.enemy) for i in range(6)]
        positions = ((250, 125), (550, 125), (300, 325), (500, 325),
                     (150, 475), (650, 475))
        for num, enem in enumerate(self.enemies):
            enem.position = positions[num]
            self.batch.add(enem)

        self.add(self.batch, z=1)
        self.player.do(Move())

        move_basic = MoveBy((120, 0), 1)
        self.enemies[0].do(Repeat(move_basic + Reverse(move_basic)))
        self.enemies[1].do(Repeat(Reverse(move_basic) + move_basic))

        move_complex = (MoveBy((-75, 75), 1) + Delay(0.5) + MoveBy(
            (-75, -75), 1) + Delay(0.5) + MoveBy(
                (75, -75), 1) + Delay(0.5) + MoveBy((75, 75), 1) + Delay(0.5))
        self.enemies[2].do(Repeat(move_complex))
        self.enemies[3].do(Repeat(Reverse(move_complex)))

        move_jump = AccelDeccel(JumpBy((200, 0), 75, 3, 3))
        move_jump_rot = AccelDeccel(RotateBy(360, 3))
        self.enemies[4].do(Repeat(move_jump + Reverse(move_jump)))
        self.enemies[4].do(Repeat(move_jump_rot + Reverse(move_jump_rot)))
        self.enemies[5].do(Repeat(Reverse(move_jump) + move_jump))
        self.enemies[5].do(Repeat(Reverse(move_jump_rot) + move_jump_rot))
예제 #15
0
파일: ring.py 프로젝트: LLNT/3X-Project
 def set_angle_action(self, prop, max_duration=4, min_duration=2):
     delta = abs(self.prop - prop)
     angle = delta * 360
     duration = min(
         1, delta * 4) * (max_duration - min_duration) + min_duration
     if prop > self.prop:
         # a right rotation, blood will be more
         if self.prop > 0.5:
             return Sequencial([(self.left,
                                 reversed(RotateBy(angle, duration)))])
         elif prop <= 0.5:
             return Sequencial([(self.right,
                                 reversed(RotateBy(angle, duration)))])
         else:
             _angle = (0.5 - self.prop) * 360
             _duration = _angle / angle * duration
             return Sequencial([
                 (self.right, reversed(RotateBy(_angle, _duration))),
                 (self.right, CallFunc(self.set_visible, False)),
                 (self.left,
                  reversed(RotateBy(angle - _angle, duration - _duration)))
             ])
     else:
         if self.prop <= 0.5:
             return Sequencial([(self.left, RotateBy(angle, duration))])
         elif prop > 0.5:
             return Sequencial([(self.right, RotateBy(angle, duration))])
         else:
             _angle = (self.prop - 0.5) * 360
             _duration = _angle / angle * duration
             return Sequencial([
                 (self.left, RotateBy(_angle, _duration)),
                 (self.right, CallFunc(self.set_visible, True)),
                 (self.right, RotateBy(angle - _angle,
                                       duration - _duration))
             ])
         pass
     pass
예제 #16
0
 def __init__(self, game, pos, bonus_type=0):
     self._game = game
     self.is_alive = True
     self._life = constants.ENEMY_ARMOR
     self.bonus_type = bonus_type
     # Mouse pointer 'body'
     self.aim = pymunk.Body(1, 1)
     self.aim_shape = pymunk.Circle(self.aim, 1, (0, 0))
     self.aim_shape.layers = 0b000  # The 'aim' should not collide with any objects
     self.aim.position = pos
     # Enemy body
     mass = 3
     radius = 15
     inertia = pymunk.moment_for_circle(mass, 0, radius, (0, 0))
     self.body = pymunk.Body(mass, inertia)
     shape = pymunk.Circle(self.body, radius, (0, 0))
     shape.elasticity = 0.9
     shape.friction = 0.8
     shape.collision_type = 3
     self.shape = shape
     if not bonus_type:
         self.sprite = Sprite("enemy.png")
     elif bonus_type == constants.HEALTH_BONUS_TYPE:
         animation = pyglet.resource.animation("bonus_enemy_green.gif")
         self.sprite = Sprite(animation)
     elif bonus_type == constants.KILLALL_BONUS_TYPE:
         animation = pyglet.resource.animation("bonus_enemy_yellow.gif")
         self.sprite = Sprite(animation)
     self.sprite.do(Repeat(RotateBy(360, 2)))
     self.body.position = self.sprite.position = pos
     self.body.apply_force(-(self.body.mass + self.aim.mass) *
                           game.space.gravity)
     # Connect aim and body with a DampedSpring - this should create the effect of flying through the air to the
     # player
     self.move = pymunk.constraint.DampedSpring(self.aim, self.body, (0, 0),
                                                (0, 0), 1, 600.0, 100)
     game.space.add(self.body, self.shape, self.aim, self.move)
예제 #17
0
    def step(self, dt):
        cm = self.collision_manager

        for player in self.target.players:
            cm.add(player)
            if player.big:
                player.dirty = True
            player.big = False

        for robot in self.target.robots:
            cm.add(robot)
            if robot.big:
                robot.dirty = True
            robot.big = False

        for fruit in self.target.projectiles:
            cm.add(fruit)

        #todo castle needs a smaller collision box
        #cm.add(self.target.castle)
        #self.target.castle.big = True

        for collision in cm.iter_all_collisions():
            print(collision[0].coord.xy, collision[1].coord.xy)
            for a in collision:
                other = collision[0] if collision[0] != a else collision[1]
                if other not in self.target.projectiles or other.owner != self:
                    a.big = True
                    a.dirty = True
                if a in self.target.projectiles and a.owner != other:
                    self.target.remove(a)
                    self.target.projectiles.remove(a)

                    other.do(RotateBy(360, 0.5))

        cm.clear()
예제 #18
0
 def wiggle(self):
     foot = random.choice([self.left, self.right])
     foot.do((RotateBy(-10, 0.1) + RotateBy(10, 0.1)) * 3)
예제 #19
0
import cocos
from cocos.director import director
from cocos.actions import RotateBy
from cocos.sprite import Sprite
from cocos.layer import *
import pyglet


class TestLayer(cocos.layer.Layer):
    def __init__(self):
        super(TestLayer, self).__init__()

        x, y = director.get_window_size()
        sprite1 = Sprite('grossini.png', (x / 4, y / 2))
        sprite2 = Sprite('grossinis_sister1.png', (x / 2, y / 2))
        sprite3 = Sprite('grossinis_sister2.png', (x / (4 / 3.0), y / 2))

        self.add(sprite2)
        self.add(sprite1)
        self.add(sprite3)


if __name__ == "__main__":
    director.init()
    main_scene = cocos.scene.Scene()
    main_scene.add(ColorLayer(255, 0, 0, 255))
    main_scene.add(TestLayer())
    main_scene.do(RotateBy(360, 2))
    director.run(main_scene)
예제 #20
0
import cocos
from cocos.actions import ScaleBy, Repeat, Reverse, RotateBy


class HelloWorld(cocos.layer.ColorLayer):
    def __init__(self):
        super().__init__(64, 64, 224, 255)
        label = cocos.text.Label('Hello, World!',
                                 font_name='Times New Roman',
                                 font_size=32,
                                 anchor_x='center',
                                 anchor_y='center')
        label.position = 320, 240
        self.add(label)
        sprite = cocos.sprite.Sprite('grossini.png')
        sprite.position = 320, 240
        sprite.scale = 3
        self.add(sprite, z=1)
        scale = ScaleBy(3, duration=2)
        label.do(Repeat(scale + Reverse(scale)))
        sprite.do(Repeat(Reverse(scale) + scale))


cocos.director.director.init()
hello_layer = HelloWorld()
hello_layer.do(RotateBy(360, duration=10))
main_scene = cocos.scene.Scene(hello_layer)
cocos.director.director.run(main_scene)
예제 #21
0
# This code is so you can run the samples without installing the package
import sys
import os

sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
#

import cocos
from cocos.director import director
from cocos.actions import RotateBy
from cocos.sprite import Sprite
from cocos.layer import *
import pyglet

if __name__ == "__main__":
    director.init()
    main_scene = cocos.scene.Scene()
    test_layer = ColorLayer(64, 64, 64, 255)
    test_layer.scale = 0.75
    main_scene.add(test_layer)

    test_layer.do(RotateBy(360, 2))
    director.run(main_scene)
예제 #22
0
 def step_right(self):
     self.right.do(MoveBy((50, 100), 0.3) | RotateBy(40, 0.3) | HOP)
예제 #23
0
 def pressService(self, params):
     print(params[CoreLayer.DATA])
     self.circle.do(RotateBy(360, duration=.5))
예제 #24
0
    def rotate(self):
        if (self.can_rotate(90)):
            action = RotateBy(90, 0)
            self.do(action)

        self.update_blk_cshape()
예제 #25
0
 def step_left(self):
     self.left.do(MoveBy((-50, 100), 0.3) | RotateBy(-40, 0.3) | HOP)