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);
}
{
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的一些运算而已。。
同上面的一样,但你自己动手画出来的印象比较深。。