游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2444|回复: 3

简单的子弹发射队列链表实现问题

[复制链接]

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2008-11-14 23:39:00 | 显示全部楼层 |阅读模式
Directx2d下的程序最近做个发射子弹的小实验。。。运行的时候最后一颗子弹出屏时发生错误啊~~result CXX0030Error: expression cannot be evaluated 懂的请帮我看下程序:

  子弹发射和出屏用的是队列链表来实现
  //move all the bullets
  for(head = bullet_list.front;head != NULL;head = head->next)
  {
  head->ypos -= dy;

  if(head->ypos < 0)
  {
  head = DeleteBullet(bullet_list,head);
  }
  
  }
我用的是vc6.0。。。
源文件都在附件里。谢谢指导啊!!! [em6]

sf_20081114233833.rar

362.12 KB, 下载次数:

7

主题

136

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2008-11-15 21:14:00 | 显示全部楼层

Re:简单的子弹发射队列链表实现问题!!!

错误在于 当双向链表只有一个的时候,DeleteBullet 会返回 NULL 所以删除
执行后,for循环需要执行 head=head->next 而 head 为 NULL 所以发生访问空指针的错误。
这是对 for 循环了解不深入所造成的初级错误。

建议:
1 将遍历表和删除表的操作放在2个循环之内。
2 一般射击游戏,子弹列表可以预先分配一个固定的长度,并且运行时通过状态来判断子弹是否无效。这样减少运行时内存的NEW和DELETE操作。具体可以参考 FREELIST 的设计模式
3 建议使用STL。

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2008-11-16 08:30:00 | 显示全部楼层

Re:简单的子弹发射队列链表实现问题!!!

恩~~多谢指导~~~会继续改进自己的程序的

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2008-11-16 09:11:00 | 显示全部楼层

Re:简单的子弹发射队列链表实现问题!!!

修改成功了~~~代码如下:
head = bullet_list.front;
while(head != NULL)
{
   head->ypos = dy;
   if(head->ypos < 0)
   {
      head = DeleteBullet(bullet_list,head);
   }
   if(head != NULL)
      head = head->next;
}
这样子就可以无措运行了~~~帮忙看看还有什么需要改进的没?再次谢谢 HuangYZ

ps:发现是自己对空指针的访问不了解造成的~~呵呵
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 21:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表