首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

100分求STG弹幕如何制作!毕业设计 急求

2013-03-04 
100分求STG弹幕怎么制作!毕业设计 急求!我想自己写一个stg,大体已经出来了,但是现在要怎么用数学函数画出

100分求STG弹幕怎么制作!毕业设计 急求!
我想自己写一个stg,大体已经出来了,但是现在要怎么用数学函数画出弹幕来?

知道的朋友给个例子让我学习一下。

我现在连一个圈的子弹都不知道怎么画出来,如果是一个圈的子弹,他们的位置要怎么改变?

如果要画出一个特殊的图像,又怎样画呢?

这是我的毕业设计,真是纠结啊!求大家帮忙!
[解决办法]
lz可以看下红龙书(DirectX 9.0 游戏开发编程基础)里面的例子系统有个例程叫firework。。实现焰火效果的,或许会得到一些启示吧。。
[解决办法]

//*****************************************************************************
// Explosion System
//********************

Firework::Firework(D3DXVECTOR3* origin, int numParticles)
{
_origin        = *origin;
_size          = 0.9f;
_vbSize        = 2048;
_vbOffset      = 0;   
_vbBatchSize   = 512; 

for(int i = 0; i < numParticles; i++)
addParticle();
}

void Firework::resetParticle(Attribute* attribute)
{
attribute->_isAlive  = true;
attribute->_position = _origin;

D3DXVECTOR3 min = D3DXVECTOR3(-1.0f, -1.0f, -1.0f);
D3DXVECTOR3 max = D3DXVECTOR3( 1.0f,  1.0f,  1.0f);

d3d::GetRandomVector(
&attribute->_velocity,
&min,
&max);

// normalize to make spherical
D3DXVec3Normalize(
&attribute->_velocity,
&attribute->_velocity);

attribute->_velocity *= 100.0f;

attribute->_color = D3DXCOLOR(
d3d::GetRandomFloat(0.0f, 1.0f),
d3d::GetRandomFloat(0.0f, 1.0f),
d3d::GetRandomFloat(0.0f, 1.0f),
1.0f);

attribute->_age      = 0.0f;
attribute->_lifeTime = 2.0f; // lives for 2 seconds
}

void Firework::update(float timeDelta)
{
std::list<Attribute>::iterator i;

for(i = _particles.begin(); i != _particles.end(); i++)
{
// only update living particles
if( i->_isAlive )
{
i->_position += i->_velocity * timeDelta;

i->_age += timeDelta;

if(i->_age > i->_lifeTime) // kill 
i->_isAlive = false;
}
}
}

void Firework::preRender()
{
PSystem::preRender();

_device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
    _device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);

// read, but don't write particles to z-buffer
_device->SetRenderState(D3DRS_ZWRITEENABLE, false);
}

void Firework::postRender()
{
PSystem::postRender();

_device->SetRenderState(D3DRS_ZWRITEENABLE, true);
}

[解决办法]
虽然是喷泉的例子, 但是原理差不多

基于OpenGL粒子系统的喷泉模拟 

http://wenku.baidu.com/view/2efdae0f76c66137ee06190b.html
[解决办法]
不同的形状算法不同,大概思路就是每个子弹沿各自的固定路径飞行,然后产生的时间相互间隔,就能实现各种图形

for(int i=0; i<100; i++)


{
   dir+=3.1415f/30.0f;
   point[i].x+=cos(dir);
   point[i].y+=sin(dir);
}
以上的话如果100个子弹间隔0.1S发射,就会形成螺旋形弹幕

[解决办法]
去弹幕论坛找吧,一般都有制作版块,人家都总结好了。
[解决办法]
自己模仿也是一样的,最笨最有效的方法,开游戏,战到BOSS,开变速齿轮变1/4或1/8速度,然后推算boss弹运动轨迹。
[解决办法]
去看看各种曲线的函数,计算机图形学那里多了。
[解决办法]
圆的方程:X^2 + Y^2 = R^2
在游戏中:
X坐标:X = COS(Φ) * R
Y坐标:Y = SIN(Φ) * R
还有一些其他的图形,比如说椭圆,螺旋曲线,自己慢慢推导.
[解决办法]
自己尝试画个圆,cos和sin的一些运算而已。。

同上面的一样,但你自己动手画出来的印象比较深。。

热点排行