Skip to content

cocos2d-python中文教程:3 动作,转场和特效 #16

Open
@bieberg0n

Description

@bieberg0n
Owner

本章对应英文文档:Actions, Transformations and Effects


动作

"动作"即对CocosNode对象下达命令.这些动作常见的有调整对象的属性,旋转,比例等.
比如"MoveBy"动作用来命令某对象在指定时间内进行移动.

首先一张rocket.png,放在与代码同目录下
rocket.png

示范代码:

import cocos
from cocos.actions import MoveBy

class Fly(cocos.layer.Layer):

    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) )
        self.add(sprite, z=0)

cocos.director.director.init()
scene = cocos.scene.Scene(Fly())
cocos.director.director.run(scene)

效果:
1.png

火箭往右上方移动.

动作根据所花费的时间不同可分为三类:

  • 瞬间动作: 顾名思义,瞬间完成的动作,比如瞬移:
#把精灵瞬移到坐标(120, 330)
sprite.do( Place( (120, 330) ))
  • 持续动作: 在一定时间内完成的动作,比如MoveBy
  • 时长未知的动作: 完成时间未知的动作

已知时长的持续型动作有些有趣的特性:
  • 执行一些修改时间的动作可以调节时间流速

  • 所有使用相对坐标的动作(以"By"结尾)和一些使用绝对坐标的动作(以"To"结尾)可以叠加"Reverse"(相反)效果以实现反方向的动作,比如顺时针旋转变成逆时针.
    (作者ps:第一章有示范代码)


## 基础动作 基础动作会修改精灵的一些基础属性,比如:

特殊动作

**时间相关:**在一段时间内待命

**流程控制:**调用一个指定的函数

**网格助手:**帮忙执行一些网格动作

摄影机相关:

动作的组合与修饰

Cocos也提供了一些强大的操作符用来组合和修饰动作,重点便是下面所列出的.

顺序执行操作符: action_1 + action_2 -> action_result
action_result的效果就是在action_1完成后执行action_2

例子:

import cocos
from cocos.actions import MoveTo

class Fly(cocos.layer.Layer):

    def __init__(self):
        super(Fly,self).__init__()

        rocket = cocos.sprite.Sprite('rocket.png')
        rocket.position = 128,128
        rocket.scale = 0.5

        move = MoveTo((100, 100), 2) + MoveTo((200, 200), 3)                     
        rocket.do( move )
        self.add(sprite, z=0)

cocos.director.director.init()
scene = cocos.scene.Scene(Fly())
cocos.director.director.run(scene)

火箭花2秒时间到达(100,100)坐标,再花3秒时间到达(200,200)坐标.

同时执行操作符: action_1 | action_2 -> action_result
即action_1和action_2同时发生.
例子:

import cocos
from cocos.actions import MoveTo, RotateBy

class Fly(cocos.layer.Layer):

    def __init__(self):
        super(Fly,self).__init__()

        rocket = cocos.sprite.Sprite('rocket.png')
        rocket.position = 128,128
        rocket.scale = 0.5

        move = MoveTo((400, 400), 5) | RotateBy(360, 5)                      
        rocket.do( move )
        self.add(sprite, z=0)

cocos.director.director.init()
scene = cocos.scene.Scene(Fly())
cocos.director.director.run(scene)

火箭往右上方翻滚.

**循环操作符:**action_1 * n -> action_result
action_1将执行n次(n是一个合法的大于等于0的整数)
例子:
将上面代码中move=那行替换为

move = RotateBy(360, 5) * 2

效果就是火箭顺时针旋转2次.

无限重复: Repeat(action_1) -> action_result
无限重复动作
例子:

import cocos
from cocos.actions import RotateBy,Repeat

class Fly(cocos.layer.Layer):

    def __init__(self):
        super(Fly,self).__init__()

        rocket = cocos.sprite.Sprite('rocket.png')
        rocket.position = 128,128
        rocket.scale = 0.5

        move = Repeat( RotateBy(360, 5) )                  
        rocket.do( move )
        self.add(sprite, z=0)

cocos.director.director.init()
scene = cocos.scene.Scene(Fly())
cocos.director.director.run(scene)

火箭不停地旋转.

时间流速修改器

网格辐度修改器


特效

(待续)


创建自定义动作

(待续)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @bieberg0n

        Issue actions

          cocos2d-python中文教程:3 动作,转场和特效 · Issue #16 · bieberg0n/blog