basierend auf dem Billiard Projekt aus bung 5 folgende Ergnzungen:


in AppDelegate.cpp
#include "SimpleAudioEngine.h"

in applicationDidEnterBackground():
	// if you use SimpleAudioEngine, it must be pause
    
	CocosDenshion::SimpleAudioEngine::getInstance()->pauseBackgroundMusic();

in applicationWillEnterForeground():
	 // if you use SimpleAudioEngine, it must resume here
    
	CocosDenshion::SimpleAudioEngine::getInstance()->resumeBackgroundMusic();

in GameScene.h, unter public:
bool onContactBegin(cocos2d::PhysicsContact &contact);

in GameScene.cpp:
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;

in createScene():
auto scene = Scene::create() 
ersetzen durch:
	auto scene = Scene::createWithPhysics();
	
	scene->getPhysicsWorld()->setGravity(Vec2(0.0f, -351.0f));




neu sind:
// on "init" you need to initialize your instance

bool GameScene::init()
{
	
if (!Layer::init())
	{
		
return false;
	}

	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	auto groundBody = PhysicsBody::createEdgeBox(Size(960, 640),
		PhysicsMaterial(0.1f, 1.0f, 0.0f));

	//set Bitmasks necessary for contact Event Listener
	groundBody->setCollisionBitmask(3);
	groundBody->setContactTestBitmask(true);
	
	//preload the sound effect
	auto audio = SimpleAudioEngine::getInstance();
	audio->preloadEffect("Billiard.wav");

	auto background = Sprite::create("menu.png");
	background->setPosition(Point(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
	this->addChild(background);
	background->setPhysicsBody(groundBody);
	
	// add contact event listener to play sounds on collision
	auto contactListener = EventListenerPhysicsContact::create();
	contactListener->onContactBegin = CC_CALLBACK_1(GameScene::onContactBegin, this);
	_eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);

	this->scheduleUpdate(); 

	return true;
}

void GameScene::createNewBall(float width) {
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();
	int random = cocos2d::RandomHelper::random_int(1, 9);

	std::stringstream s;
	s << "kugel_" << random << ".png";
	auto ball_sprite = Sprite::create(s.str());
	ball_sprite->setPosition(visibleSize.width - width, visibleSize.height - 50);
	ball_sprite->setTag(random);

	auto ball_physics = PhysicsBody::createCircle(
		46.5f,
		PhysicsMaterial(0.1f, 0.9f, 0.0f)
	);

	ball_physics->setTag(random);

	//set Bitmasks necessary for contact Event Listener
	ball_physics->setCollisionBitmask(3);
	ball_physics->setContactTestBitmask(true);
	ball_sprite->setPhysicsBody(ball_physics);

	this->addChild(ball_sprite, 1);
}

void GameScene::update(float delta) {
	if (ball_time >= 120) {
		Size visibleSize = Director::getInstance()->getVisibleSize();

		int a = visibleSize.width;
		int random = cocos2d::RandomHelper::random_int(1, a);
		this->createNewBall(random);
		ball_time = 0; 
	}
	ball_time++; 
}

bool GameScene::onContactBegin(cocos2d::PhysicsContact &contact)
{
	//play sound on any collision in this game scene
	auto audio = SimpleAudioEngine::getInstance();
	audio->playEffect("Billiard.wav");

	return true;
}

