mirror of https://github.com/axmolengine/axmol.git
220 lines
5.9 KiB
C++
220 lines
5.9 KiB
C++
/*******************************************************************************
|
||
* Copyright (c) 2013, Esoteric Software
|
||
* All rights reserved.
|
||
*
|
||
* Redistribution and use in source and binary forms, with or without
|
||
* modification, are permitted provided that the following conditions are met:
|
||
*
|
||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||
* list of conditions and the following disclaimer.
|
||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||
* this list of conditions and the following disclaimer in the documentation
|
||
* and/or other materials provided with the distribution.
|
||
*
|
||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
******************************************************************************/
|
||
|
||
#include "EffekseerTest.h"
|
||
#include <iostream>
|
||
#include <fstream>
|
||
#include <string.h>
|
||
|
||
USING_NS_AX;
|
||
|
||
|
||
//------------------------------------------------------------------
|
||
//
|
||
// SpineTestScene
|
||
//
|
||
//------------------------------------------------------------------
|
||
|
||
EffekseerTests::EffekseerTests()
|
||
{
|
||
auto fu = FileUtils::getInstance();
|
||
_searchPaths = fu->getSearchPaths();
|
||
fu->addSearchPath("Effekseer", true);
|
||
|
||
ADD_TEST_CASE(EffekseerTest);
|
||
}
|
||
|
||
EffekseerTests::~EffekseerTests()
|
||
{
|
||
FileUtils::getInstance()->setSearchPaths(_searchPaths);
|
||
}
|
||
|
||
EffekseerTest::EffekseerTest() : _title("EffekseerTest") {}
|
||
|
||
EffekseerTest::~EffekseerTest() {
|
||
/**
|
||
終了時にマネージャーを破棄します。
|
||
|
||
You will destroy the manager on exit.
|
||
|
||
你會在最後摧毀經理。
|
||
|
||
你会在最后摧毁经理。
|
||
*/
|
||
manager->release();
|
||
}
|
||
|
||
std::string EffekseerTest::title() const
|
||
{
|
||
return _title;
|
||
}
|
||
|
||
bool EffekseerTest::init()
|
||
{
|
||
if (!TestCase::init())
|
||
return false;
|
||
|
||
|
||
auto rsize = _director->getOpenGLView()->getDesignResolutionSize();
|
||
|
||
//auto sprite = Sprite::create("HelloWorld.png");
|
||
//sprite->setPosition(Vec2(320, 200));
|
||
//this->addChild(sprite, 0);
|
||
|
||
// for update
|
||
this->scheduleUpdate();
|
||
|
||
/**
|
||
efk::EffectManagerのインスタンスを生成します。
|
||
|
||
You create an instance of efk::EffectManager.
|
||
|
||
您創建一個efk::EffectManager的實例。
|
||
|
||
您创建一个efk::EffectManager的实例。
|
||
*/
|
||
manager = efk::EffectManager::create(rsize);
|
||
|
||
return true;
|
||
}
|
||
|
||
void EffekseerTest::update(float delta)
|
||
{
|
||
// Effect1
|
||
if (count % 300 == 0)
|
||
{
|
||
/**
|
||
拡大率を指定してエフェクトファイルを読み込みます。
|
||
|
||
You read an effect file with specifying scale.
|
||
|
||
您通過指定比例讀取效果文件。
|
||
|
||
您通过指定比例读取效果文件。
|
||
*/
|
||
auto effect = efk::Effect::create("Laser01.efk", 13.0f);
|
||
if (effect != nullptr)
|
||
{
|
||
/**
|
||
エミッターを生成し、パラメーターを設定してレイヤーに追加します。
|
||
|
||
You generate an emitter, set parameters and add it to the layer.
|
||
|
||
您會生成一個發射極,並通過將參數添加到該層。
|
||
|
||
您会生成一个发射极,并通过将参数添加到该层。
|
||
*/
|
||
|
||
auto emitter = efk::EffectEmitter::create(manager);
|
||
emitter->setEffect(effect);
|
||
emitter->setPlayOnEnter(true);
|
||
|
||
emitter->setRotation3D(cocos2d::Vec3(0, 90, 0));
|
||
emitter->setPosition(Vec2(320, 150));
|
||
|
||
// emitter->setScale(13);
|
||
this->addChild(emitter, 0);
|
||
|
||
// No need (because it uses autorelease after 1.41)
|
||
//effect->release();
|
||
}
|
||
}
|
||
|
||
// Effect2
|
||
if (count % 300 == 120)
|
||
{
|
||
/**
|
||
エフェクトファイルを読み込みます。
|
||
|
||
You read an effect file.
|
||
|
||
您讀取效果文件。
|
||
|
||
您读取效果文件。
|
||
*/
|
||
auto effect = efk::Effect::create("Homing_Laser01.efk");
|
||
if (effect != nullptr)
|
||
{
|
||
/**
|
||
エミッターを生成し、パラメーターを設定してレイヤーに追加します。
|
||
|
||
You generate an emitter, set parameters and add it to the layer.
|
||
|
||
您會生成一個發射極,並通過將參數添加到該層。
|
||
|
||
您会生成一个发射极,并通过将参数添加到该层。
|
||
*/
|
||
|
||
auto emitter = efk::EffectEmitter::create(manager);
|
||
emitter->setEffect(effect);
|
||
emitter->setPlayOnEnter(true);
|
||
|
||
emitter->setPosition(Vec2(320, 150));
|
||
emitter->setScale(4);
|
||
this->addChild(emitter, 0);
|
||
|
||
/**
|
||
Some parameters are required to set after addChild
|
||
|
||
一部のパラメーターはAddChildした後に設定する必要があります。
|
||
*/
|
||
emitter->setTargetPosition(cocos2d::Vec3(320, 480, 0));
|
||
|
||
// No need (because it uses autorelease after 1.41)
|
||
//effect->release();
|
||
}
|
||
}
|
||
|
||
/**
|
||
毎フレーム、マネージャーを更新します。
|
||
|
||
You update the manager every frame.
|
||
|
||
您將更新每一幀,經理。
|
||
|
||
您将更新每一帧,经理。
|
||
*/
|
||
manager->update();
|
||
|
||
count++;
|
||
}
|
||
|
||
void EffekseerTest::visit(cocos2d::Renderer *renderer, const cocos2d::Mat4& parentTransform, uint32_t parentFlags)
|
||
{
|
||
/**
|
||
visitを継承して、エフェクトを実際に描画する処理を追加します。
|
||
|
||
You inherit visit and add a process to actually draw the effect.
|
||
|
||
你繼承的visit,然後添加的實際繪製效果的過程。
|
||
|
||
你继承的visit,然后添加的实际绘制效果的过程。
|
||
*/
|
||
manager->begin(renderer, _globalZOrder);
|
||
cocos2d::Scene::visit(renderer, parentTransform, parentFlags);
|
||
manager->end(renderer, _globalZOrder);
|
||
}
|
||
|