1 说明:
=====
1.1 cocos2d是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。
1.2 不逊色于pygame,但是其实
Python版的cocos2d库是基于pygame和pyglet的,也就是集大成者
。
1.3 中文教程少的可怜,所以写一个入门教程,把坑填了,亲测过,注释里有讲解。
1.4
A 2D framework for games and multimedia===一个游戏和多媒体的2D框架。
1.5 环境:
华为笔记本电脑、深度deepin-linux操作系统、python3.8和微软vscode编辑器。
2 安装:
=====
pip install cocos2d
#本机安装
#sudo pip3.8 install cocos2d #太慢了
#sudo pip3.8 install -i https://mirrors.aliyun.com/pypi/simple cocos2d #超快,推荐国内源安装
3 官网:
=====
https://github.com/los-cocos/cocos
https://pypi.org/project/cocos2d/
http://python.cocos2d.org/doc/programming_guide/quickstart.html
4 Helloworld.py:
===========
4.1 说明:很简单,但很重要;解决中文字体问题、解决窗口大小和名称问题。
4.2 代码:
#注意导出模块是cocos,不是cocos2
#但是安装是pip install cocos2d
import cocos
class HelloWorld(cocos.layer.Layer):
def __init__(self):
super(HelloWorld, self).__init__()
label = cocos.text.Label(
#'Hello World!',
'你好,世界!',
#font_name='Times New Roman', #本身不支持中文,改为下面
font_name='微软雅黑', #微软雅黑是支持中文的字体
font_size=32,
anchor_x='center', anchor_y='center')
#label.position = 320, 240 #默认窗口大小的一半,就是中心位置
# 获得主窗口的宽度和高度,是一个二元组
width, height = cocos.director.director.get_window_size()
# 设置标签的位置
label.position = width // 2, height // 2 # //整数除法 去掉小数部分
self.add(label)
if __name__ == "__main__":
#cocos.director.director.init() #默认窗口大小
#cocos.director.director.init(width=640,height=480,caption="hello world")
#自定义窗口大小和标题
cocos.director.director.init(width=1200,height=800,caption="你好,世界!") #本身就是支持中文
hello_layer = HelloWorld()
main_scene = cocos.scene.Scene(hello_layer)
cocos.director.director.run(main_scene)
4.3 效果图:
4.4 定义main函数问题,采用默认设置,代码如下:
import cocos
class HelloWorld(cocos.layer.Layer):
def __init__(self):
super(HelloWorld, self).__init__()
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)
#定义main函数问题
def main():
cocos.director.director.init()
hello_layer = HelloWorld()
main_scene = cocos.scene.Scene (hello_layer)
cocos.director.director.run(main_scene)
if __name__ == '__main__':
main()
5 图片显示和音乐播放:
=================
5.1 说明:对图片格式进行测试和播放音乐格式进行测试,注释里有。
5.2 代码一:
import cocos
#下面2个模块必须导出
from cocos.scenes.transitions import *
from cocos.audio.pygame import music
#背景层
class Game_BG(cocos.layer.Layer):
def __init__(self):
super(Game_BG,self).__init__()
d_width, d_height = cocos.director.director.get_window_size()
# 创建背景精灵,图片格式,images文件夹与本代码在同一个目录下
#background = cocos.sprite.Sprite('images/bg.jpg')
#background = cocos.sprite.Sprite('images/help-up.png')
#background = cocos.sprite.Sprite('images/2.jpeg')
background = cocos.sprite.Sprite('images/1.ico')
#background = cocos.sprite.Sprite('images/fruit.svg') #报错
#background = cocos.sprite.Sprite('images/yytd.gif') #报错
background.position = d_width // 2, d_height // 2
self.add(background)
if __name__=='__main__':
#指定背景音乐后台 sdl,很重要!!否则背景音乐不能播放
cocos.director.director.init(width=640,height=480,caption="picture&music",audio_backend='sdl')
bg=Game_BG()
main_scence=cocos.scene.Scene(bg)
#播放背景音乐
#music.load('sound/sn.mp3'.encode())#报错,还有指定路径,这与图片默认路径不一样
music.load('/home/xgj/Desktop/Cocos2d/coex/sound/sn.mp3'.encode())
music.play(loops=-1) #播放 循环次数
music.set_volume(1)#声音大小
cocos.director.director.run(main_scence)
5.2 代码二:高级一些,文字label和图片sprite缩放和旋转,加上背景音乐。
import cocos
from cocos.actions import *
class Hello_world(cocos.layer.ColorLayer):
def __init__(self):
#设置背景属性
super(Hello_world, 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 = 600,200 #建议窗口大小的一半,是居中
#添加标签到层
self.add(label)
#创建精灵,并配置精灵属性,图片的文件夹images与代码在同一个目录下
man_sprite = cocos.sprite.Sprite("images/bg.jpeg")
man_sprite.position = 600,500
#设置精灵显示大小
man_sprite.scale =0.8
#添加精灵到层中
self.add(man_sprite,z = 1,name='man')
#使用动作方法函数,在3秒钟里缩放3次
scale = ScaleBy(3,duration=3)
#标签重复以上动作+旋转
label.do(Repeat(scale+Reverse(scale)))
#精灵重复 旋转+缩放动作
man_sprite.do(Repeat(Reverse(scale)+scale))
#cocos.director.director.init() #默认的
#---add,加背景音乐的设置如下---
cocos.director.director.init(width=1200,height=800,audio_backend='sdl')
from cocos.scenes.transitions import * #包在此处导入,是便于学习
from cocos.audio.pygame import music #一般包是放在第一步
music.load('/home/xgj/Desktop/Cocos2d/coex/sound/sn.mp3'.encode()) #背景音乐文件需要指定路径,区别
music.play(loops=-1) #播放 循环次数
music.set_volume(1)#声音大小
#---add,加背景音乐如上---
main_layer = Hello_world()
#该图层在10秒钟内旋转360度
main_layer.do(RotateBy(360,duration=10))
main_scene = cocos.scene.Scene(main_layer)
cocos.director.director.run(main_scene)
5.3 效果图:
6 按钮放大和缩小,播放wav文件:
6.1 代码:
import cocos
from cocos.scenes.transitions import * #播放音乐包一
from cocos.audio.pygame import music #播放音乐包二
from cocos.audio.effect import Effect
#背景层
class Game_BG(cocos.layer.Layer):
def __init__(self):
super(Game_BG,self).__init__()
d_width, d_height = cocos.director.director.get_window_size()
# 创建背景精灵
background = cocos.sprite.Sprite('images/bg.jpeg')
background.position = d_width // 2, d_height // 2
self.add(background)
#自定义菜单类
class main_menu(cocos.menu.Menu):
def __init__(self):
super(main_menu, self).__init__()
# 也可以改变图片项的大小
# 改变字体
self.font_item['font_size'] = 66
# 选中时
self.font_item_selected['font_size'] = 66
#改变颜色 rgba
self.font_item['color'] = (255,255,255,25)
# 选中时
self.font_item_selected['color'] = (215,255,255,255)
menu_start=cocos.menu.ImageMenuItem('images/start-up.png',self.menu_start_callback)
menu_setting= cocos.menu.ImageMenuItem('images/setting-up.png', self.menu_setting_callback)
help_setting = cocos.menu.ImageMenuItem('images/help-up.png', self.menu_help_callback)
#创建菜单(添加项的列表,自定义布局位置)
self.create_menu([menu_start,menu_setting,help_setting],
layout_strategy=cocos.menu.fixedPositionMenuLayout([(500,339),(500,220),(500,100)]),
selected_effect=cocos.menu.zoom_in(),
unselected_effect=cocos.menu.zoom_out())
#定义播放按钮功能设置
def menu_start_callback(self):
#注意播放wav与mp3一样,需要指定具体路径和目录,否则报错
yinxiao=Effect('/home/xgj/Desktop/Cocos2d/coex/sound/dd.wav') #音效
#yinxiao=Effect('sound/dd.wav') # 报错
yinxiao.play()
def menu_help_callback(self):
pass
def menu_setting_callback(self):
pass
if __name__=='__main__':
#初始化导演
cocos.director.director.init(width=640,height=480,caption="png按钮放大",audio_backend='sdl')
#将背景层 添加到场景
bg=Game_BG()
main_scence=cocos.scene.Scene(bg)
#添加菜单
mainmenu=main_menu()
main_scence.add(mainmenu)
# 播放背景音乐
music.load('/home/xgj/Desktop/Cocos2d/coex/sound/sn.mp3'.encode())
music.play(loops=-1) # 播放 循环次数
music.set_volume(1) # 声音大小
#启动场景
cocos.director.director.run(main_scence)
6.2 效果图:
在这基础上去做一个音乐播放器是很有动感的!!
7 圆形球动感:
===========
7.1 代码:
import pyglet
from cocos.director import director
from cocos.scene import Scene
from cocos.layer import Layer
from cocos.actions import JumpBy, Lens3D, Reverse
class BackgroundLayer(Layer):
def __init__(self):
super(BackgroundLayer, self).__init__()
#导入图片image需要导入pyglet包,注意图片与代码文件在一个目录下即可
self.image = pyglet.resource.image('flag.png')
#self.image = pyglet.resource.image('yytd.gif') #虽然能显示,但是不是gif那样的动感
def draw(self):
self.image.blit(0, 0)
if __name__ == "__main__":
#主窗口可调节大小
director.init(resizable=True)
director.set_depth_test()
scene = Scene(BackgroundLayer())
lens = Lens3D(radius=150, lens_effect=0.7, center=(150, 150), grid=(20, 16), duration=50)
jump = JumpBy((360, 0), 170, 3, 4)
action = scene.do(lens)
scene.do((jump + Reverse(jump)) * 5, target=action)
director.run(scene)
7.2 效果图:
8 官网代码效果图,代码省略。
===是不是入门了,很简单===
喜欢就点赞、关注、转发和收藏。
中文文档太少了,做一点贡献。